feat: publish standalone worker
Separate worker packaging and service lifecycle from the control plane.
Этот коммит содержится в:
56
internal/workercluster/testhelpers_test.go
Обычный файл
56
internal/workercluster/testhelpers_test.go
Обычный файл
@@ -0,0 +1,56 @@
|
||||
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)
|
||||
}
|
||||
Ссылка в новой задаче
Block a user