@@ -3,11 +3,12 @@ package main
33import (
44 "context"
55 "fmt"
6+ "os"
7+ "path"
68 "testing"
79 "time"
810
911 "github.com/florianl/go-nflog/v2"
10- "github.com/jarcoal/httpmock"
1112)
1213
1314type mockDNSServer struct {
@@ -82,52 +83,8 @@ func (m *MockCommandWithError) Run() error {
8283 return fmt .Errorf ("failed to run command" )
8384}
8485
85- func TestRun (t * testing.T ) {
86-
87- ctx := context .Background ()
88- ctx , cancel := context .WithCancel (ctx )
89- time .AfterFunc (2 * time .Second , cancel )
90-
91- httpmock .Activate ()
92- defer httpmock .DeactivateAndReset ()
93-
94- httpmock .RegisterResponder ("POST" , fmt .Sprintf ("%s/owner/repo/actions/runs/1287185438/monitor" , agentApiBaseUrl ),
95- httpmock .NewStringResponder (200 , "" ))
96-
97- err := Run (ctx , "./testfiles/agent.json" ,
98- & mockDNSServer {}, & mockDNSServer {}, & Firewall {& MockIPTables {}},
99- & MockAgentNflogger {}, & MockCommand {}, createTempFileWithContents ("" ), createTempFileWithContents ("{}" ), nil )
100-
101- if err != nil {
102- fmt .Printf ("err: %v\n " , err )
103- t .Fail ()
104- }
105- }
106-
107- func TestRunWithDNSFailure (t * testing.T ) {
108-
109- ctx := context .Background ()
110- ctx , cancel := context .WithCancel (ctx )
111- time .AfterFunc (5 * time .Second , cancel ) // this should not be used, it should error out earlier
112-
113- httpmock .Activate ()
114- defer httpmock .DeactivateAndReset ()
115-
116- httpmock .RegisterResponder ("POST" , fmt .Sprintf ("%s/owner/repo/actions/runs/1287185438/monitor" , agentApiBaseUrl ),
117- httpmock .NewStringResponder (200 , "" ))
118-
119- err := Run (ctx , "./testfiles/agent.json" ,
120- & mockDNSServer {}, & mockDNSServerWithError {}, & Firewall {& MockIPTables {}},
121- & MockAgentNflogger {}, & MockCommand {}, createTempFileWithContents ("" ), createTempFileWithContents ("{}" ), nil )
122-
123- // if 2 seconds pass
124- if err == nil {
125- t .Fail ()
126- }
127-
128- }
129-
130- func TestRunWithCMDFailure (t * testing.T ) {
86+ /*
87+ func TestRunWithNflogError(t *testing.T) {
13188
13289 ctx := context.Background()
13390 ctx, cancel := context.WithCancel(ctx)
@@ -141,36 +98,86 @@ func TestRunWithCMDFailure(t *testing.T) {
14198
14299 err := Run(ctx, "./testfiles/agent.json",
143100 &mockDNSServer{}, &mockDNSServer{}, &Firewall{&MockIPTables{}},
144- & MockAgentNflogger {}, & MockCommandWithError {}, createTempFileWithContents ("" ), createTempFileWithContents ("{}" ), nil )
101+ &MockAgentNfloggerWithErr {}, &MockCommand {}, createTempFileWithContents(""), createTempFileWithContents("{}"), nil)
145102
146103 // if 2 seconds pass
147104 if err == nil {
148105 t.Fail()
149106 }
150107
151108}
109+ */
152110
153- /*
154- func TestRunWithNflogError(t *testing.T) {
111+ func deleteTempFile (path string ) {
112+ os .Remove (path )
113+ }
155114
115+ func getContext (seconds int ) context.Context {
156116 ctx := context .Background ()
157117 ctx , cancel := context .WithCancel (ctx )
158- time.AfterFunc(5*time.Second, cancel) // this should not be used, it should error out earlier
159-
160- httpmock.Activate()
161- defer httpmock.DeactivateAndReset()
162-
163- httpmock.RegisterResponder("POST", fmt.Sprintf("%s/owner/repo/actions/runs/1287185438/monitor", agentApiBaseUrl),
164- httpmock.NewStringResponder(200, ""))
118+ time .AfterFunc (2 * time .Second , cancel )
165119
166- err := Run(ctx, "./testfiles/agent.json",
167- &mockDNSServer{}, &mockDNSServer{}, &Firewall{&MockIPTables{}},
168- &MockAgentNfloggerWithErr{}, &MockCommand{}, createTempFileWithContents(""), createTempFileWithContents("{}"), nil)
120+ return ctx
121+ }
169122
170- // if 2 seconds pass
171- if err == nil {
172- t.Fail()
123+ func TestRun (t * testing.T ) {
124+ type args struct {
125+ ctxCancelDuration int
126+ configFilePath string
127+ hostDNSServer DNSServer
128+ dockerDNSServer DNSServer
129+ iptables * Firewall
130+ nflog AgentNflogger
131+ cmd Command
132+ resolvdConfigPath string
133+ dockerDaemonConfigPath string
134+ ciTestOnly bool
173135 }
174136
137+ tests := []struct {
138+ name string
139+ args args
140+ wantErr bool
141+ }{
142+ {name : "success" , args : args {ctxCancelDuration : 2 , configFilePath : "./testfiles/agent.json" , hostDNSServer : & mockDNSServer {}, dockerDNSServer : & mockDNSServer {},
143+ iptables : & Firewall {& MockIPTables {}}, nflog : & MockAgentNflogger {}, cmd : & MockCommand {}, resolvdConfigPath : createTempFileWithContents ("" ),
144+ dockerDaemonConfigPath : createTempFileWithContents ("{}" )}, wantErr : false },
145+ {name : "success monitor process" , args : args {ctxCancelDuration : 2 , configFilePath : "./testfiles/agent.json" , hostDNSServer : & mockDNSServer {}, dockerDNSServer : & mockDNSServer {},
146+ iptables : & Firewall {& MockIPTables {}}, nflog : & MockAgentNflogger {}, cmd : nil , resolvdConfigPath : createTempFileWithContents ("" ),
147+ dockerDaemonConfigPath : createTempFileWithContents ("{}" ), ciTestOnly : true }, wantErr : false },
148+ {name : "success allowed endpoints" , args : args {ctxCancelDuration : 2 , configFilePath : "./testfiles/agent-allowed-endpoints.json" ,
149+ hostDNSServer : & mockDNSServer {}, dockerDNSServer : & mockDNSServer {},
150+ iptables : nil , nflog : & MockAgentNflogger {}, cmd : & MockCommand {}, resolvdConfigPath : createTempFileWithContents ("" ),
151+ dockerDaemonConfigPath : createTempFileWithContents ("{}" ), ciTestOnly : true }, wantErr : false },
152+ {name : "dns failure" , args : args {ctxCancelDuration : 5 , configFilePath : "./testfiles/agent.json" , hostDNSServer : & mockDNSServer {}, dockerDNSServer : & mockDNSServerWithError {},
153+ iptables : & Firewall {& MockIPTables {}}, nflog : & MockAgentNflogger {}, cmd : & MockCommand {}, resolvdConfigPath : createTempFileWithContents ("" ),
154+ dockerDaemonConfigPath : createTempFileWithContents ("{}" )}, wantErr : true },
155+ {name : "cmd failure" , args : args {ctxCancelDuration : 5 , configFilePath : "./testfiles/agent.json" , hostDNSServer : & mockDNSServer {}, dockerDNSServer : & mockDNSServer {},
156+ iptables : & Firewall {& MockIPTables {}}, nflog : & MockAgentNflogger {}, cmd : & MockCommandWithError {}, resolvdConfigPath : createTempFileWithContents ("" ),
157+ dockerDaemonConfigPath : createTempFileWithContents ("{}" )}, wantErr : true },
158+ {name : "nflog failure" , args : args {ctxCancelDuration : 5 , configFilePath : "./testfiles/agent.json" , hostDNSServer : & mockDNSServer {}, dockerDNSServer : & mockDNSServer {},
159+ iptables : & Firewall {& MockIPTables {}}, nflog : & MockAgentNfloggerWithErr {}, cmd : & MockCommand {}, resolvdConfigPath : createTempFileWithContents ("" ),
160+ dockerDaemonConfigPath : createTempFileWithContents ("{}" )}, wantErr : true },
161+ }
162+ _ , ciTest := os .LookupEnv ("CI" )
163+ fmt .Printf ("ci-test: %t\n " , ciTest )
164+ for _ , tt := range tests {
165+ if ! tt .args .ciTestOnly || ciTest {
166+ t .Run (tt .name , func (t * testing.T ) {
167+ tempDir := os .TempDir ()
168+ if err := Run (getContext (tt .args .ctxCancelDuration ), tt .args .configFilePath , tt .args .hostDNSServer , tt .args .dockerDNSServer ,
169+ tt .args .iptables , tt .args .nflog , tt .args .cmd , tt .args .resolvdConfigPath , tt .args .dockerDaemonConfigPath , tempDir ); (err != nil ) != tt .wantErr {
170+ t .Errorf ("Run() error = %v, wantErr %v" , err , tt .wantErr )
171+ }
172+
173+ deleteTempFile (path .Join (tempDir , "resolved.conf" ))
174+ deleteTempFile (path .Join (tempDir , "daemon.json" ))
175+
176+ if tt .args .ciTestOnly {
177+ fmt .Printf ("Reverting firewall changes\n " )
178+ RevertFirewallChanges (nil )
179+ }
180+ })
181+ }
182+ }
175183}
176- */
0 commit comments