Files
worker/internal/workercluster/testhelpers_test.go
Gleb Tv 2c7a0236da feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
2026-07-13 17:55:14 +03:00

57 строки
1.4 KiB
Go

package workercluster
import (
"bytes"
"encoding/json"
"testing"
)
// jsonMarshal marshals v to JSON or fails the test.
func jsonMarshal(v interface{}) ([]byte, error) {
return json.Marshal(v)
}
// bytesBuffer is a minimal in-memory raft.SnapshotSink that captures
// the bytes written to it. Used by snapshot Persist() in tests.
type bytesBuffer struct {
bytes.Buffer
}
func (b *bytesBuffer) Close() error { return nil }
func (b *bytesBuffer) Cancel() error { return nil }
func (b *bytesBuffer) ID() string { return "test-snapshot" }
// mustEntry encodes an Entry struct with the given field values into
// JSON. It exists so the test bodies stay readable. All payload fields
// are []byte; pass nil to leave them unset.
func mustEntry(
t *testing.T,
typ EntryType,
setJSON, memberJSON, observeJSON, adoptedJSON, configJSON, stateJSON, outboxJSON []byte,
) []byte {
t.Helper()
entry := Entry{
Type: typ,
Set: rawOrEmpty(setJSON),
Member: rawOrEmpty(memberJSON),
Observe: rawOrEmpty(observeJSON),
Adopted: rawOrEmpty(adoptedJSON),
Report: rawOrEmpty(configJSON),
State: rawOrEmpty(stateJSON),
Outbox: rawOrEmpty(outboxJSON),
}
raw, err := json.Marshal(entry)
if err != nil {
t.Fatalf("encode entry: %v", err)
}
return raw
}
func rawOrEmpty(b []byte) json.RawMessage {
if len(b) == 0 {
return nil
}
return json.RawMessage(b)
}