erste module drin.
zwischenstand: Architektur aktualisiert, TOFU implementiert,
This commit is contained in:
1 parent
9d5789c5d7
commit
c8df9d7651
41 files changed
+6455
-36
No files matched your search
@@ -0,0 +1,84 @@
|
||||
package stream
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestNewEvent(t *testing.T) {
|
||||
before := time.Now().Unix()
|
||||
ev, err := NewEvent(EventNodeCommand, map[string]string{"action": "drain"})
|
||||
if err != nil {
|
||||
t.Fatalf("unerwarteter Fehler: %v", err)
|
||||
}
|
||||
if !strings.HasPrefix(ev.ID, "evt_") || len(ev.ID) <= len("evt_") {
|
||||
t.Errorf("ID = %q, erwartet Präfix evt_", ev.ID)
|
||||
}
|
||||
if ev.Timestamp < before || ev.Timestamp > time.Now().Unix() {
|
||||
t.Errorf("Timestamp = %d liegt nicht im Testzeitraum", ev.Timestamp)
|
||||
}
|
||||
if ev.Type != EventNodeCommand {
|
||||
t.Errorf("Type = %q", ev.Type)
|
||||
}
|
||||
if ev.NodeID != "" {
|
||||
t.Errorf("NodeID = %q, erwartet leer (setzt der Hub)", ev.NodeID)
|
||||
}
|
||||
if string(ev.Payload) != `{"action":"drain"}` {
|
||||
t.Errorf("Payload = %s", ev.Payload)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewEvent_NilPayload(t *testing.T) {
|
||||
ev, err := NewEvent(EventLeaseRenew, nil)
|
||||
if err != nil {
|
||||
t.Fatalf("unerwarteter Fehler: %v", err)
|
||||
}
|
||||
if ev.Payload != nil {
|
||||
t.Errorf("Payload = %s, erwartet nil", ev.Payload)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewEvent_Errors(t *testing.T) {
|
||||
if _, err := NewEvent("", nil); !errors.Is(err, ErrInvalidEvent) {
|
||||
t.Errorf("leerer Typ: erwartet ErrInvalidEvent, bekommen %v", err)
|
||||
}
|
||||
if _, err := NewEvent(EventError, make(chan int)); !errors.Is(err, ErrInvalidEvent) {
|
||||
t.Errorf("nicht serialisierbare Payload: erwartet ErrInvalidEvent, bekommen %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewEvent_UniqueIDs(t *testing.T) {
|
||||
seen := map[string]bool{}
|
||||
for range 1000 {
|
||||
ev, err := NewEvent(EventError, nil)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if seen[ev.ID] {
|
||||
t.Fatalf("doppelte ID %q", ev.ID)
|
||||
}
|
||||
seen[ev.ID] = true
|
||||
}
|
||||
}
|
||||
|
||||
// Feldnamen gemäß Spec Abschnitt 4.2.
|
||||
func TestEvent_JSONFieldNames(t *testing.T) {
|
||||
ev := Event{
|
||||
ID: "evt_1",
|
||||
Timestamp: 1727618531,
|
||||
Type: EventServiceState,
|
||||
NodeID: "node-proxmox-vm-42",
|
||||
Payload: json.RawMessage(`{"a":1}`),
|
||||
}
|
||||
b, err := json.Marshal(ev)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
want := `{"event_id":"evt_1","timestamp":1727618531,"type":"service_state","node_id":"node-proxmox-vm-42","payload":{"a":1}}`
|
||||
if string(b) != want {
|
||||
t.Errorf("JSON weicht ab\n got: %s\nwant: %s", b, want)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user