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
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)
|
|
}
|
|
}
|
|
|