1package ports
2
3import (
4 "testing"
5
6 "github.com/bnema/vev/internal/domain"
7 "github.com/bnema/vev/internal/protocol"
8 "github.com/stretchr/testify/require"
9)
10
11func acquisitionTestPolicy() BrokerPolicy {
12 return BrokerPolicy{ProtocolVersion: 60, CatalogSchemaVersion: 3, EnvironmentPolicy: protocol.EnvironmentPolicyDaemonOwned, Transport: "quic", Trust: "openssh", Launch: "explicit", Isolation: "user"}
13}
14
15func TestBrokerDialTargetFirstContactAndBoundValidation(t *testing.T) {
16 registration := domain.RemoteRegistration{Endpoint: "user@example.test", Incarnation: [16]byte{1}, Generation: 1}
17 base := BrokerDialTarget{Fence: BrokerEndpointFence{Registration: registration}, Address: "ssh:user@example.test", Policy: acquisitionTestPolicy(), StartMode: BrokerDaemonExistingOnly}
18 require.NoError(t, base.Validate())
19
20 bound := base
21 bound.ExpectedIdentity = BrokerExpectedIdentity{Bound: true, Identity: "daemon-1"}
22 require.NoError(t, bound.Validate())
23
24 malformed := base
25 malformed.ExpectedIdentity.Identity = "daemon-without-bound-bit"
26 require.Error(t, malformed.Validate())
27
28 // The start mode is explicit and closed: zero is invalid, and both legal
29 // values validate.
30 missingMode := base
31 missingMode.StartMode = 0
32 require.ErrorContains(t, missingMode.Validate(), "invalid broker daemon start mode")
33 startable := base
34 startable.StartMode = BrokerDaemonStartIfNeeded
35 require.NoError(t, startable.Validate())
36
37 for _, tc := range []struct {
38 name string
39 mode BrokerDaemonStartMode
40 valid bool
41 }{
42 {"existing only", BrokerDaemonExistingOnly, true},
43 {"start if needed", BrokerDaemonStartIfNeeded, true},
44 {"zero", 0, false},
45 {"unknown", BrokerDaemonStartMode(3), false},
46 } {
47 t.Run("mode/"+tc.name, func(t *testing.T) {
48 require.Equal(t, tc.valid, tc.mode.Validate() == nil)
49 })
50 }
51}
52
53func TestBrokerEndpointFenceSeparatesLocalAndRemoteAuthority(t *testing.T) {
54 require.NoError(t, (BrokerEndpointFence{Local: true}).Validate())
55 require.Error(t, (BrokerEndpointFence{}).Validate())
56 require.Error(t, (BrokerEndpointFence{Local: true, Registration: domain.RemoteRegistration{Endpoint: "user@example.test", Incarnation: [16]byte{1}, Generation: 1}}).Validate())
57}