You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

52 lines
1.7 KiB

package main
import (
"encoding/json"
"testing"
"time"
"tera-clone/services/tera-api/internal/domain"
"tera-clone/services/tera-api/internal/logstorage"
"tera-clone/services/tera-api/internal/serial"
)
type captureJournal struct {
class string
timestamp time.Time
payload json.RawMessage
}
func (j *captureJournal) Append(class string, timestamp time.Time, value any) error {
payload, err := json.Marshal(value)
if err != nil {
return err
}
j.class, j.timestamp, j.payload = class, timestamp, payload
return nil
}
func (*captureJournal) Read(string) ([]json.RawMessage, error) { return nil, nil }
func (*captureJournal) ApplyRetention(logstorage.Retention) error { return nil }
func (*captureJournal) Snapshot() (logstorage.Snapshot, error) { return logstorage.Snapshot{}, nil }
func TestRecordPayloadAppendsBoundedPortEvent(t *testing.T) {
now := time.Date(2026, 7, 31, 1, 2, 3, 0, time.UTC)
payload := []byte{0x00, 0xff, 'A'}
journal := &captureJournal{}
if err := recordPayload(journal, serial.StreamEvent{
Timestamp: now, Channel: "CH01", LeaseID: "lease-1", ClientID: "session-1",
Direction: "rx", Bytes: uint64(len(payload)), Payload: payload,
}); err != nil {
t.Fatal(err)
}
if journal.class != logstorage.ClassPort || !journal.timestamp.Equal(now) {
t.Fatalf("journal routing = %q %s", journal.class, journal.timestamp)
}
var event domain.PortLogEvent
if err := json.Unmarshal(journal.payload, &event); err != nil {
t.Fatal(err)
}
if event.Channel != "CH01" || event.Direction != "RX" || event.Actor != "session-1" || event.PayloadBytes != len(payload) || event.PayloadEncoding != "base64" || string(event.Payload) != string(payload) {
t.Fatalf("port event = %#v", event)
}
}