Skip to content

Commit 99eb075

Browse files
committed
adds tests
1 parent 1fa0881 commit 99eb075

File tree

1 file changed

+199
-0
lines changed

1 file changed

+199
-0
lines changed

agent/agent_test.go

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ import (
77
"testing"
88

99
"github.com/stretchr/testify/assert"
10+
"github.com/stretchr/testify/require"
1011

1112
"github.com/netboxlabs/orb-agent/agent/backend"
1213
"github.com/netboxlabs/orb-agent/agent/config"
1314
"github.com/netboxlabs/orb-agent/agent/configmgr"
15+
"github.com/netboxlabs/orb-agent/agent/policies"
1416
)
1517

1618
// mockConfigManager implements configmgr.Manager for testing Stop delegation
@@ -40,3 +42,200 @@ func TestAgentStop_DelegatesToConfigManagerStop(t *testing.T) {
4042

4143
assert.True(t, mockMgr.stopCalled, "expected configManager.Stop to be called")
4244
}
45+
46+
// mockPolicyManager implements policymgr.PolicyManager for testing
47+
type mockPolicyManager struct {
48+
repo policies.PolicyRepo
49+
}
50+
51+
func (m *mockPolicyManager) ManagePolicy(_ config.PolicyPayload) {}
52+
func (m *mockPolicyManager) RemovePolicyDataset(_ string, _ string, _ backend.Backend) {}
53+
func (m *mockPolicyManager) GetPolicyState() ([]policies.PolicyData, error) {
54+
return nil, nil
55+
}
56+
func (m *mockPolicyManager) GetRepo() policies.PolicyRepo {
57+
return m.repo
58+
}
59+
func (m *mockPolicyManager) ApplyBackendPolicies(_ backend.Backend) error {
60+
return nil
61+
}
62+
func (m *mockPolicyManager) RemoveBackendPolicies(_ backend.Backend, _ bool) error {
63+
return nil
64+
}
65+
func (m *mockPolicyManager) RemovePolicy(_ string, _ string, _ string) error {
66+
return nil
67+
}
68+
69+
// mockSecretsManager implements secretsmgr.Manager for testing
70+
type mockSecretsManager struct{}
71+
72+
func (m *mockSecretsManager) Start(_ context.Context) error {
73+
return nil
74+
}
75+
func (m *mockSecretsManager) RegisterUpdatePoliciesCallback(_ func(map[string]bool)) {}
76+
func (m *mockSecretsManager) SolvePolicySecrets(payload config.PolicyPayload) (config.PolicyPayload, error) {
77+
return payload, nil
78+
}
79+
func (m *mockSecretsManager) SolveConfigSecrets(backends map[string]any, configManager config.ManagerConfig) (map[string]any, config.ManagerConfig, error) {
80+
return backends, configManager, nil
81+
}
82+
83+
func TestStart_FleetConfig_OverridesExistingOTLPGrpcURL(t *testing.T) {
84+
logger := slog.New(slog.NewTextHandler(os.Stderr, nil))
85+
repo, err := policies.NewMemRepo()
86+
require.NoError(t, err)
87+
88+
cfg := config.Config{
89+
OrbAgent: config.OrbAgent{
90+
Backends: map[string]any{
91+
"common": map[string]any{
92+
"otlp": map[string]any{
93+
"grpc": "original:4317",
94+
},
95+
},
96+
},
97+
ConfigManager: config.ManagerConfig{
98+
Active: "fleet",
99+
},
100+
SecretsManager: config.ManagerSecrets{
101+
Active: "",
102+
},
103+
},
104+
}
105+
106+
agent, err := New(logger, cfg)
107+
require.NoError(t, err)
108+
109+
orbAgent := agent.(*orbAgent)
110+
orbAgent.secretsManager = &mockSecretsManager{}
111+
orbAgent.policyManager = &mockPolicyManager{repo: repo}
112+
113+
ctx, cancel := context.WithCancel(context.Background())
114+
defer cancel()
115+
116+
// Start will fail when trying to start backends, but we can check the config before that
117+
err = orbAgent.Start(ctx, cancel)
118+
// We expect an error because there are no actual backends configured
119+
// But the important thing is that the config was modified
120+
require.Error(t, err)
121+
122+
// Verify the config was modified by checking backendsCommon which is set in startBackends
123+
// The OTLP configuration happens before startBackends, so backendsCommon should have the updated value
124+
assert.Equal(t, "localhost:4317", orbAgent.backendsCommon.Otlp.Grpc, "grpc URL should be overridden to localhost:4317")
125+
}
126+
127+
func TestStart_FleetConfig_CreatesOTLPSectionWhenMissing(t *testing.T) {
128+
logger := slog.New(slog.NewTextHandler(os.Stderr, nil))
129+
repo, err := policies.NewMemRepo()
130+
require.NoError(t, err)
131+
132+
cfg := config.Config{
133+
OrbAgent: config.OrbAgent{
134+
Backends: map[string]any{
135+
"common": map[string]any{
136+
"other": "value",
137+
},
138+
},
139+
ConfigManager: config.ManagerConfig{
140+
Active: "fleet",
141+
},
142+
SecretsManager: config.ManagerSecrets{
143+
Active: "",
144+
},
145+
},
146+
}
147+
148+
agent, err := New(logger, cfg)
149+
require.NoError(t, err)
150+
151+
orbAgent := agent.(*orbAgent)
152+
orbAgent.secretsManager = &mockSecretsManager{}
153+
orbAgent.policyManager = &mockPolicyManager{repo: repo}
154+
155+
ctx, cancel := context.WithCancel(context.Background())
156+
defer cancel()
157+
158+
err = orbAgent.Start(ctx, cancel)
159+
require.Error(t, err) // Expected to fail when starting backends
160+
161+
// Verify the config was modified by checking backendsCommon which is set in startBackends
162+
// The OTLP configuration happens before startBackends, so backendsCommon should have the updated value
163+
assert.Equal(t, "localhost:4317", orbAgent.backendsCommon.Otlp.Grpc, "grpc URL should be set to localhost:4317")
164+
}
165+
166+
func TestStart_FleetConfig_CreatesCommonBackendWhenMissing(t *testing.T) {
167+
logger := slog.New(slog.NewTextHandler(os.Stderr, nil))
168+
repo, err := policies.NewMemRepo()
169+
require.NoError(t, err)
170+
171+
cfg := config.Config{
172+
OrbAgent: config.OrbAgent{
173+
Backends: map[string]any{},
174+
ConfigManager: config.ManagerConfig{
175+
Active: "fleet",
176+
},
177+
SecretsManager: config.ManagerSecrets{
178+
Active: "",
179+
},
180+
},
181+
}
182+
183+
agent, err := New(logger, cfg)
184+
require.NoError(t, err)
185+
186+
orbAgent := agent.(*orbAgent)
187+
orbAgent.secretsManager = &mockSecretsManager{}
188+
orbAgent.policyManager = &mockPolicyManager{repo: repo}
189+
190+
ctx, cancel := context.WithCancel(context.Background())
191+
defer cancel()
192+
193+
err = orbAgent.Start(ctx, cancel)
194+
require.Error(t, err) // Expected to fail when starting backends
195+
196+
// Verify the config was modified by checking backendsCommon which is set in startBackends
197+
// The OTLP configuration happens before startBackends, so backendsCommon should have the updated value
198+
assert.Equal(t, "localhost:4317", orbAgent.backendsCommon.Otlp.Grpc, "grpc URL should be set to localhost:4317")
199+
}
200+
201+
func TestStart_NonFleetConfig_DoesNotModifyConfig(t *testing.T) {
202+
logger := slog.New(slog.NewTextHandler(os.Stderr, nil))
203+
repo, err := policies.NewMemRepo()
204+
require.NoError(t, err)
205+
206+
originalGrpcURL := "original:4317"
207+
cfg := config.Config{
208+
OrbAgent: config.OrbAgent{
209+
Backends: map[string]any{
210+
"common": map[string]any{
211+
"otlp": map[string]any{
212+
"grpc": originalGrpcURL,
213+
},
214+
},
215+
},
216+
ConfigManager: config.ManagerConfig{
217+
Active: "local", // Not fleet
218+
},
219+
SecretsManager: config.ManagerSecrets{
220+
Active: "",
221+
},
222+
},
223+
}
224+
225+
agent, err := New(logger, cfg)
226+
require.NoError(t, err)
227+
228+
orbAgent := agent.(*orbAgent)
229+
orbAgent.secretsManager = &mockSecretsManager{}
230+
orbAgent.policyManager = &mockPolicyManager{repo: repo}
231+
232+
ctx, cancel := context.WithCancel(context.Background())
233+
defer cancel()
234+
235+
err = orbAgent.Start(ctx, cancel)
236+
require.Error(t, err) // Expected to fail when starting backends
237+
238+
// Verify the config was NOT modified by checking backendsCommon which is set in startBackends
239+
// For non-fleet config, the original value should remain
240+
assert.Equal(t, originalGrpcURL, orbAgent.backendsCommon.Otlp.Grpc, "grpc URL should remain unchanged for non-fleet config")
241+
}

0 commit comments

Comments
 (0)