Skip to content

Commit 4052215

Browse files
committed
tests for wait and post actions
1 parent 6efbd9e commit 4052215

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed

pkg/cmd/post_action_test.go

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
package cmd
2+
3+
import (
4+
"bytes"
5+
"io/ioutil"
6+
"os"
7+
"testing"
8+
"time"
9+
10+
"github.com/stretchr/testify/assert"
11+
)
12+
13+
func Test_postActionCmd(t *testing.T) {
14+
cmd := NewRootCmd()
15+
16+
tmp := makeTempHostsFile(t, "postActionCmd")
17+
defer os.Remove(tmp.Name())
18+
19+
t.Run("Wait and disable", func(t *testing.T) {
20+
b := bytes.NewBufferString("")
21+
args := []string{"enable", "profile1", "--host-file", tmp.Name(), "--wait", "10ms"}
22+
23+
cmd.SetOut(b)
24+
cmd.SetArgs(args)
25+
26+
err := cmd.Execute()
27+
assert.NoError(t, err)
28+
29+
out, _ := ioutil.ReadAll(b)
30+
assert.Contains(t, string(out), "Waiting for 10ms or ctrl+c to disable from profile 'profile1'")
31+
})
32+
33+
t.Run("Wait and disable on SIGTERM", func(t *testing.T) {
34+
b := bytes.NewBufferString("")
35+
args := []string{"enable", "profile1", "--host-file", tmp.Name(), "--wait", "0"}
36+
37+
cmd.SetOut(b)
38+
cmd.SetArgs(args)
39+
40+
proc, err := os.FindProcess(os.Getpid())
41+
assert.NoError(t, err)
42+
43+
go func() {
44+
time.Sleep(10 * time.Millisecond)
45+
err = proc.Signal(os.Interrupt)
46+
assert.NoError(t, err)
47+
}()
48+
49+
err = cmd.Execute()
50+
assert.NoError(t, err)
51+
52+
out, _ := ioutil.ReadAll(b)
53+
assert.Contains(t, string(out), "Waiting until ctrl+c to disable from profile 'profile1'")
54+
})
55+
56+
}
57+
58+
func Test_waitSignalOrDuration(t *testing.T) {
59+
t.Run("timeout", func(t *testing.T) {
60+
d := 10 * time.Millisecond
61+
done := waitSignalOrDuration(d)
62+
v, ok := <-done
63+
assert.Equal(t, v, struct{}{})
64+
assert.Equal(t, ok, true)
65+
})
66+
67+
t.Run("timeout abs", func(t *testing.T) {
68+
d := -10 * time.Millisecond
69+
done := waitSignalOrDuration(d)
70+
v, ok := <-done
71+
assert.Equal(t, v, struct{}{})
72+
assert.Equal(t, ok, true)
73+
})
74+
75+
t.Run("SIGINT", func(t *testing.T) {
76+
proc, err := os.FindProcess(os.Getpid())
77+
assert.NoError(t, err)
78+
79+
d := 1 * time.Hour
80+
done := waitSignalOrDuration(d)
81+
82+
time.Sleep(10 * time.Millisecond)
83+
err = proc.Signal(os.Interrupt)
84+
assert.NoError(t, err)
85+
86+
v, ok := <-done
87+
assert.Equal(t, v, struct{}{})
88+
assert.Equal(t, ok, true)
89+
})
90+
91+
t.Run("Wait forever", func(t *testing.T) {
92+
proc, err := os.FindProcess(os.Getpid())
93+
assert.NoError(t, err)
94+
95+
done := waitSignalOrDuration(0)
96+
97+
time.Sleep(10 * time.Millisecond)
98+
err = proc.Signal(os.Interrupt)
99+
assert.NoError(t, err)
100+
101+
v, ok := <-done
102+
assert.Equal(t, v, struct{}{})
103+
assert.Equal(t, ok, true)
104+
})
105+
106+
}

0 commit comments

Comments
 (0)