Skip to content

Commit 880d16f

Browse files
committed
refactor: agent and cmd types and tests
1 parent aebf99c commit 880d16f

21 files changed

+1027
-342
lines changed

cmd/agent_smith/config.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,14 @@ type fetchConfigurationResponse struct {
2020
Configuration agent.Device `json:"configuration"`
2121
}
2222

23-
func runConfig(params *configParams) {
23+
func runConfig(params *configContext) {
2424
logger := utils.ConfigureLogger("agent_smith", os.Stdout, utils.Default)
2525

2626
// Show header
2727
logger.Info("Agent Smith started", "version", version.Version, "os", runtime.GOOS)
2828

2929
// Get installation paths data
30-
var pathsData agent.PathsData
31-
err := pathsData.Load(context.Background(), params.OrgId, logger)
30+
pathsData, err := agent.NewPathsData(context.Background(), params.OrgId, logger, params.Sys, params.Domain)
3231
if err != nil {
3332
logger.Error("Failed to read paths", "error", err)
3433
return

cmd/agent_smith/config_context.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package main
2+
3+
import (
4+
"bytes"
5+
"flag"
6+
"fmt"
7+
8+
"github.com/RewstApp/agent-smith-go/internal/agent"
9+
"github.com/RewstApp/agent-smith-go/internal/utils"
10+
)
11+
12+
type configContext struct {
13+
OrgId string
14+
ConfigUrl string
15+
ConfigSecret string
16+
LoggingLevel string
17+
UseSyslog bool
18+
DisableAgentPostback bool
19+
NoAutoUpdates bool
20+
21+
Sys agent.SystemInfoProvider
22+
Domain agent.DomainInfoProvider
23+
}
24+
25+
func newConfigContext(args []string, sys agent.SystemInfoProvider, domain agent.DomainInfoProvider) (*configContext, error) {
26+
var params configContext
27+
28+
fs := flag.NewFlagSet("config", flag.ContinueOnError)
29+
fs.StringVar(&params.OrgId, "org-id", "", "Organization ID")
30+
fs.StringVar(&params.ConfigUrl, "config-url", "", "Configuration URL")
31+
fs.StringVar(&params.ConfigSecret, "config-secret", "", "Configuration Secret")
32+
fs.StringVar(&params.LoggingLevel, "logging-level", string(utils.Default), fmt.Sprintf("Logging level: %s", getAllowedConfigLevelsString(", ")))
33+
fs.BoolVar(&params.UseSyslog, "syslog", false, "Write log messages to system log")
34+
fs.BoolVar(&params.DisableAgentPostback, "disable-agent-postback", false, "Disable agent postback")
35+
fs.BoolVar(&params.NoAutoUpdates, "no-auto-updates", false, "No auto updates")
36+
fs.SetOutput(bytes.NewBuffer([]byte{}))
37+
38+
err := fs.Parse(args)
39+
if err != nil {
40+
return nil, err
41+
}
42+
43+
if params.OrgId == "" {
44+
return nil, fmt.Errorf("missing org-id")
45+
}
46+
47+
if params.ConfigUrl == "" {
48+
return nil, fmt.Errorf("missing config-url")
49+
}
50+
51+
if params.ConfigSecret == "" {
52+
return nil, fmt.Errorf("missing config-secret")
53+
}
54+
55+
if !allowedLoggingLevels[params.LoggingLevel] {
56+
return nil, fmt.Errorf("invalid logging-level")
57+
}
58+
59+
params.Sys = sys
60+
params.Domain = domain
61+
62+
return &params, nil
63+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package main
2+
3+
import (
4+
"strings"
5+
"testing"
6+
)
7+
8+
func TestNewConfigContext(t *testing.T) {
9+
orgId := "test123"
10+
configUrl := "https://config.url/"
11+
configSecret := "secret123"
12+
13+
result, _ := newConfigContext([]string{"--org-id", orgId, "--config-url", configUrl, "--config-secret", configSecret}, nil, nil)
14+
15+
if result.OrgId != orgId {
16+
t.Errorf("expected %v, got %v", orgId, result.OrgId)
17+
}
18+
19+
if result.ConfigUrl != configUrl {
20+
t.Errorf("expected %v, got %v", configUrl, result.ConfigUrl)
21+
}
22+
23+
if result.ConfigSecret != configSecret {
24+
t.Errorf("expected %v, got %v", configSecret, result.ConfigSecret)
25+
}
26+
27+
if result.Sys != nil {
28+
t.Errorf("expected nil, got %v", result.Sys)
29+
}
30+
31+
if result.Domain != nil {
32+
t.Errorf("expected nil, got %v", result.Domain)
33+
}
34+
35+
errorTests := []struct {
36+
args []string
37+
message string
38+
}{
39+
{[]string{"--config-url", configUrl, "--config-secret", configSecret}, "missing org-id"},
40+
{[]string{"--org-id", orgId, "--config-secret", configSecret}, "missing config-url"},
41+
{[]string{"--org-id", orgId, "--config-url", configUrl}, "missing config-secret"},
42+
{[]string{"--=uninstall"}, "bad flag syntax"},
43+
{[]string{"--org-id", orgId, "--config-url", configUrl, "--config-secret", configSecret, "--logging-level", "invalid"}, "invalid logging-level"},
44+
}
45+
46+
for _, errorTest := range errorTests {
47+
_, err := newConfigContext(errorTest.args, nil, nil)
48+
49+
if err == nil || !strings.Contains(err.Error(), errorTest.message) {
50+
t.Errorf("expected error %s, got %v", errorTest.message, err.Error())
51+
}
52+
}
53+
}

cmd/agent_smith/main.go

Lines changed: 13 additions & 162 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,14 @@
11
package main
22

33
import (
4-
"bytes"
5-
"flag"
64
"fmt"
75
"os"
86
"strings"
97

8+
"github.com/RewstApp/agent-smith-go/internal/agent"
109
"github.com/RewstApp/agent-smith-go/internal/utils"
1110
)
1211

13-
type uninstallParams struct {
14-
OrgId string
15-
Uninstall bool
16-
}
17-
18-
func parseUninstallParams(args []string) (*uninstallParams, error) {
19-
var params uninstallParams
20-
21-
fs := flag.NewFlagSet("uninstall", flag.ContinueOnError)
22-
fs.StringVar(&params.OrgId, "org-id", "", "Organization ID")
23-
fs.BoolVar(&params.Uninstall, "uninstall", false, "Uninstall the agent")
24-
fs.SetOutput(bytes.NewBuffer([]byte{}))
25-
26-
err := fs.Parse(args)
27-
if err != nil {
28-
return nil, err
29-
}
30-
31-
if params.OrgId == "" {
32-
return nil, fmt.Errorf("missing org-id")
33-
}
34-
35-
if !params.Uninstall {
36-
return nil, fmt.Errorf("missing uninstall")
37-
}
38-
39-
return &params, nil
40-
}
41-
42-
type configParams struct {
43-
OrgId string
44-
ConfigUrl string
45-
ConfigSecret string
46-
LoggingLevel string
47-
UseSyslog bool
48-
DisableAgentPostback bool
49-
NoAutoUpdates bool
50-
}
51-
5212
var allowedLoggingLevels = map[string]bool{
5313
string(utils.Info): true,
5414
string(utils.Warn): true,
@@ -58,43 +18,6 @@ var allowedLoggingLevels = map[string]bool{
5818
string(utils.Default): true,
5919
}
6020

61-
func parseConfigParams(args []string) (*configParams, error) {
62-
var params configParams
63-
64-
fs := flag.NewFlagSet("config", flag.ContinueOnError)
65-
fs.StringVar(&params.OrgId, "org-id", "", "Organization ID")
66-
fs.StringVar(&params.ConfigUrl, "config-url", "", "Configuration URL")
67-
fs.StringVar(&params.ConfigSecret, "config-secret", "", "Configuration Secret")
68-
fs.StringVar(&params.LoggingLevel, "logging-level", string(utils.Default), fmt.Sprintf("Logging level: %s", getAllowedConfigLevelsString(", ")))
69-
fs.BoolVar(&params.UseSyslog, "syslog", false, "Write log messages to system log")
70-
fs.BoolVar(&params.DisableAgentPostback, "disable-agent-postback", false, "Disable agent postback")
71-
fs.BoolVar(&params.NoAutoUpdates, "no-auto-updates", false, "No auto updates")
72-
fs.SetOutput(bytes.NewBuffer([]byte{}))
73-
74-
err := fs.Parse(args)
75-
if err != nil {
76-
return nil, err
77-
}
78-
79-
if params.OrgId == "" {
80-
return nil, fmt.Errorf("missing org-id")
81-
}
82-
83-
if params.ConfigUrl == "" {
84-
return nil, fmt.Errorf("missing config-url")
85-
}
86-
87-
if params.ConfigSecret == "" {
88-
return nil, fmt.Errorf("missing config-secret")
89-
}
90-
91-
if !allowedLoggingLevels[params.LoggingLevel] {
92-
return nil, fmt.Errorf("invalid logging-level")
93-
}
94-
95-
return &params, nil
96-
}
97-
9821
func getAllowedConfigLevelsString(separator string) string {
9922
var levels []string
10023
for level := range allowedLoggingLevels {
@@ -109,108 +32,36 @@ func getAllowedConfigLevelsString(separator string) string {
10932
return strings.Join(levels, separator)
11033
}
11134

112-
type serviceParams struct {
113-
OrgId string
114-
ConfigFile string
115-
LogFile string
116-
}
117-
118-
func parseServiceParams(args []string) (*serviceParams, error) {
119-
var params serviceParams
120-
121-
fs := flag.NewFlagSet("config", flag.ContinueOnError)
122-
fs.StringVar(&params.OrgId, "org-id", "", "Organization ID")
123-
fs.StringVar(&params.ConfigFile, "config-file", "", "Configuration File")
124-
fs.StringVar(&params.LogFile, "log-file", "", "Log file")
125-
fs.SetOutput(bytes.NewBuffer([]byte{}))
126-
127-
err := fs.Parse(args)
128-
if err != nil {
129-
return nil, err
130-
}
131-
132-
if params.OrgId == "" {
133-
return nil, fmt.Errorf("missing org-id")
134-
}
135-
136-
if params.ConfigFile == "" {
137-
return nil, fmt.Errorf("missing config-file")
138-
}
139-
140-
if params.LogFile == "" {
141-
return nil, fmt.Errorf("missing log-file")
142-
}
143-
144-
return &params, nil
145-
}
146-
147-
type updateParams struct {
148-
OrgId string
149-
Update bool
150-
LoggingLevel string
151-
UseSyslog bool
152-
DisableAgentPostback bool
153-
NoAutoUpdates bool
154-
}
155-
156-
func parseUpdateParams(args []string) (*updateParams, error) {
157-
var params updateParams
158-
159-
fs := flag.NewFlagSet("config", flag.ContinueOnError)
160-
fs.StringVar(&params.OrgId, "org-id", "", "Organization ID")
161-
fs.BoolVar(&params.Update, "update", false, "Update the agent")
162-
fs.StringVar(&params.LoggingLevel, "logging-level", string(utils.Default), fmt.Sprintf("Logging level: %s", getAllowedConfigLevelsString(", ")))
163-
fs.BoolVar(&params.UseSyslog, "syslog", false, "Write log messages to system log")
164-
fs.BoolVar(&params.DisableAgentPostback, "disable-agent-postback", false, "Disable agent postback")
165-
fs.BoolVar(&params.NoAutoUpdates, "no-auto-updates", false, "No auto updates")
166-
fs.SetOutput(bytes.NewBuffer([]byte{}))
167-
168-
err := fs.Parse(args)
169-
if err != nil {
170-
return nil, err
171-
}
172-
173-
if params.OrgId == "" {
174-
return nil, fmt.Errorf("missing org-id")
175-
}
176-
177-
if !params.Update {
178-
return nil, fmt.Errorf("missing update")
179-
}
180-
181-
if !allowedLoggingLevels[params.LoggingLevel] {
182-
return nil, fmt.Errorf("invalid logging-level")
183-
}
184-
185-
return &params, nil
186-
}
187-
18835
func main() {
189-
uninstallParams, err := parseUninstallParams(os.Args[1:])
36+
// Create providers
37+
sys := agent.NewSystemInfoProvider()
38+
domain := agent.NewDomainInfoProvider()
39+
40+
uninstallContext, err := newUninstallContext(os.Args[1:])
19041
if err == nil {
19142
// Run uninstall routine
192-
runUninstall(uninstallParams)
43+
runUninstall(uninstallContext)
19344
return
19445
}
19546

196-
configParams, err := parseConfigParams(os.Args[1:])
47+
configContext, err := newConfigContext(os.Args[1:], sys, domain)
19748
if err == nil {
19849
// Run config routine
199-
runConfig(configParams)
50+
runConfig(configContext)
20051
return
20152
}
20253

203-
serviceParams, err := parseServiceParams(os.Args[1:])
54+
serviceContext, err := newServiceContext(os.Args[1:], sys, domain)
20455
if err == nil {
20556
// Run service routine
206-
runService(serviceParams)
57+
runService(serviceContext)
20758
return
20859
}
20960

210-
updateParams, err := parseUpdateParams(os.Args[1:])
61+
updateContext, err := newUpdateContext(os.Args[1:], sys, domain)
21162
if err == nil {
21263
// Run update routine
213-
runUpdate(updateParams)
64+
runUpdate(updateContext)
21465
return
21566
}
21667

0 commit comments

Comments
 (0)