gates / gates (push) Successful in 44s
The hub holds the new package -> success; another package -> 502 'previous code still works' (now true); cannot be asked -> 504, no promise. Tests TestR1254_* red before the fix. Commit only; the agent release needs the vouch.
49 lines
2.1 KiB
Go
49 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"encoding/base64"
|
|
"encoding/json"
|
|
"errors"
|
|
"testing"
|
|
|
|
"gitea.dooplex.hu/admin/felhom-agent/internal/hub"
|
|
)
|
|
|
|
// R-1254 H2, the production question: does the hub's current package equal the pending upload body? Compared by the
|
|
// identity blob the hub serves back. A package without an identity, or a hub that cannot answer, is never „held".
|
|
// RED-PROOF: make hubHoldsEscrowPackage return true when the hub has any package → the „another package" case
|
|
// passes as held → FAILS.
|
|
func TestR1254_HubHoldsComparesTheIdentityBlob(t *testing.T) {
|
|
body := func(id string) []byte {
|
|
b, _ := json.Marshal(escrowUploadRequest{BlobB64: base64.StdEncoding.EncodeToString([]byte("k")),
|
|
IdentityBlobB64: base64.StdEncoding.EncodeToString([]byte(id))})
|
|
return b
|
|
}
|
|
hubWith := func(id string, present bool, err error) func(context.Context) (*hub.IdentityEscrowResponse, error) {
|
|
return func(context.Context) (*hub.IdentityEscrowResponse, error) {
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &hub.IdentityEscrowResponse{Present: present, IdentityEscrowB64: base64.StdEncoding.EncodeToString([]byte(id))}, nil
|
|
}
|
|
}
|
|
ctx := context.Background()
|
|
if held, err := hubHoldsEscrowPackage(ctx, hubWith("NEW", true, nil), body("NEW")); err != nil || !held {
|
|
t.Fatalf("the hub holds the new package: held=%v err=%v", held, err)
|
|
}
|
|
if held, err := hubHoldsEscrowPackage(ctx, hubWith("OLD", true, nil), body("NEW")); err != nil || held {
|
|
t.Fatalf("the hub holds another package: held=%v err=%v", held, err)
|
|
}
|
|
if held, err := hubHoldsEscrowPackage(ctx, hubWith("", false, nil), body("NEW")); err != nil || held {
|
|
t.Fatalf("the hub holds nothing: held=%v err=%v", held, err)
|
|
}
|
|
if _, err := hubHoldsEscrowPackage(ctx, hubWith("", false, errors.New("unreachable")), body("NEW")); err == nil {
|
|
t.Fatal("a hub that cannot answer must be an error (unknown), never „not held\"")
|
|
}
|
|
noID, _ := json.Marshal(escrowUploadRequest{BlobB64: "aw=="})
|
|
if _, err := hubHoldsEscrowPackage(ctx, hubWith("NEW", true, nil), noID); err == nil {
|
|
t.Fatal("a package without an identity blob cannot be compared — an error")
|
|
}
|
|
}
|