1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package chaosdaemon
17
18 import (
19 "testing"
20
21 . "github.com/onsi/gomega"
22
23 pb "github.com/chaos-mesh/chaos-mesh/pkg/chaosdaemon/pb"
24 )
25
26 func Test_generateQdiscArgs(t *testing.T) {
27 g := NewWithT(t)
28
29 typ := "netem"
30
31 t.Run("without parent and handle", func(t *testing.T) {
32
33 args, err := generateQdiscArgs("add", &pb.Qdisc{Type: typ})
34
35 g.Expect(err).To(BeNil())
36 g.Expect(args).To(Equal([]string{"qdisc", "add", "dev", "eth0", "root", "handle", "1:0", typ}))
37 })
38
39 t.Run("with parent and handle", func(t *testing.T) {
40 args, err := generateQdiscArgs("add", &pb.Qdisc{
41 Type: typ,
42 Parent: &pb.TcHandle{
43 Major: 1,
44 Minor: 1,
45 },
46 Handle: &pb.TcHandle{
47 Major: 10,
48 Minor: 0,
49 },
50 })
51
52 g.Expect(err).To(BeNil())
53 g.Expect(args).To(Equal([]string{"qdisc", "add", "dev", "eth0", "parent", "1:1", "handle", "10:0", typ}))
54 })
55 }
56
57 func Test_convertNetemToArgs(t *testing.T) {
58 g := NewWithT(t)
59
60 t.Run("convert network delay", func(t *testing.T) {
61 args := convertNetemToArgs(&pb.Netem{
62 Time: "1000ms",
63 })
64 g.Expect(args).To(Equal("delay 1000ms"))
65
66 args = convertNetemToArgs(&pb.Netem{
67 Time: "1000ms",
68 DelayCorr: 25,
69 })
70 g.Expect(args).To(Equal("delay 1000ms"))
71
72 args = convertNetemToArgs(&pb.Netem{
73 Time: "1000us",
74 Jitter: "10000ns",
75 DelayCorr: 25,
76 })
77 g.Expect(args).To(Equal("delay 1000us 10000ns 25.000000"))
78 })
79
80 t.Run("convert packet limit", func(t *testing.T) {
81 args := convertNetemToArgs(&pb.Netem{
82 Limit: 1000,
83 })
84 g.Expect(args).To(Equal("limit 1000"))
85 })
86
87 t.Run("convert packet loss", func(t *testing.T) {
88 args := convertNetemToArgs(&pb.Netem{
89 Loss: 100,
90 })
91 g.Expect(args).To(Equal("loss 100.000000"))
92
93 args = convertNetemToArgs(&pb.Netem{
94 Loss: 50,
95 LossCorr: 12,
96 })
97 g.Expect(args).To(Equal("loss 50.000000 12.000000"))
98 })
99
100 t.Run("convert packet reorder", func(t *testing.T) {
101 args := convertNetemToArgs(&pb.Netem{
102 Reorder: 5,
103 ReorderCorr: 10,
104 })
105 g.Expect(args).To(Equal(""))
106
107 args = convertNetemToArgs(&pb.Netem{
108 Time: "1000ms",
109 Jitter: "10000ms",
110 DelayCorr: 25,
111 Reorder: 5,
112 ReorderCorr: 10,
113 Gap: 10,
114 })
115 g.Expect(args).To(Equal("delay 1000ms 10000ms 25.000000 reorder 5.000000 10.000000 gap 10"))
116
117 args = convertNetemToArgs(&pb.Netem{
118 Time: "1000ms",
119 Jitter: "10000ms",
120 DelayCorr: 25,
121 Reorder: 5,
122 ReorderCorr: 10,
123 Gap: 10,
124 })
125 g.Expect(args).To(Equal("delay 1000ms 10000ms 25.000000 reorder 5.000000 10.000000 gap 10"))
126
127 args = convertNetemToArgs(&pb.Netem{
128 Time: "1000ms",
129 Jitter: "10000ms",
130 DelayCorr: 25,
131 Reorder: 5,
132 Gap: 10,
133 })
134 g.Expect(args).To(Equal("delay 1000ms 10000ms 25.000000 reorder 5.000000 gap 10"))
135 })
136
137 t.Run("convert packet duplication", func(t *testing.T) {
138 args := convertNetemToArgs(&pb.Netem{
139 Duplicate: 10,
140 })
141 g.Expect(args).To(Equal("duplicate 10.000000"))
142
143 args = convertNetemToArgs(&pb.Netem{
144 Duplicate: 10,
145 DuplicateCorr: 50,
146 })
147 g.Expect(args).To(Equal("duplicate 10.000000 50.000000"))
148 })
149
150 t.Run("convert packet corrupt", func(t *testing.T) {
151 args := convertNetemToArgs(&pb.Netem{
152 Corrupt: 10,
153 })
154 g.Expect(args).To(Equal("corrupt 10.000000"))
155
156 args = convertNetemToArgs(&pb.Netem{
157 Corrupt: 10,
158 CorruptCorr: 50,
159 })
160 g.Expect(args).To(Equal("corrupt 10.000000 50.000000"))
161 })
162
163 t.Run("complicate cases", func(t *testing.T) {
164 args := convertNetemToArgs(&pb.Netem{
165 Time: "1000ms",
166 Jitter: "10000ms",
167 Reorder: 5,
168 Gap: 10,
169 Corrupt: 10,
170 CorruptCorr: 50,
171 })
172 g.Expect(args).To(Equal("delay 1000ms 10000ms reorder 5.000000 gap 10 corrupt 10.000000 50.000000"))
173 })
174
175 t.Run("delay with rate", func(t *testing.T) {
176 args := convertNetemToArgs(&pb.Netem{
177 Time: "1000ms",
178 Jitter: "10000ms",
179 Rate: "8000bit",
180 })
181 g.Expect(args).To(Equal("delay 1000ms 10000ms rate 8000bit"))
182 })
183 }
184