Skip to content

Commit fc933e2

Browse files
authored
Add UTs for CNI Windows Policy (#2965)
* enhance cni policy UTs * add UTs for policy windows * add a new UT * add more windows policy UTs * add new UTs * add new UTs * add new UTs
1 parent e64d9d8 commit fc933e2

File tree

1 file changed

+231
-2
lines changed

1 file changed

+231
-2
lines changed

network/policy/policy_windows_test.go

+231-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,10 @@
44
package policy
55

66
import (
7+
"encoding/json"
78
"testing"
89

10+
"github.com/Microsoft/hcsshim/hcn"
911
. "github.com/onsi/ginkgo"
1012
. "github.com/onsi/gomega"
1113
)
@@ -40,11 +42,104 @@ var _ = Describe("Windows Policies", func() {
4042
}}`),
4143
}
4244

43-
expected_policy := `{"InboundProxyPort":"15003","OutboundProxyPort":"15001","FilterTuple":{"Protocols":"6"},"UserSID":"S-1-5-32-556","InboundExceptions":{},"OutboundExceptions":{}}`
45+
expectedPolicy := `{"InboundProxyPort":"15003","OutboundProxyPort":"15001","FilterTuple":{"Protocols":"6"},"UserSID":"S-1-5-32-556","InboundExceptions":{},"OutboundExceptions":{}}`
4446

4547
generatedPolicy, err := GetHcnL4WFPProxyPolicy(policy)
4648
Expect(err).To(BeNil())
47-
Expect(string(generatedPolicy.Settings)).To(Equal(expected_policy))
49+
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
50+
})
51+
})
52+
53+
Describe("Test GetHcnACLPolicy", func() {
54+
It("Should raise error for invalid json", func() {
55+
policy := Policy{
56+
Type: ACLPolicy,
57+
Data: []byte(`invalid json`),
58+
}
59+
60+
_, err := GetHcnACLPolicy(policy)
61+
Expect(err).NotTo(BeNil())
62+
})
63+
64+
It("Should marshall the ACL policy correctly", func() {
65+
policy := Policy{
66+
Type: ACLPolicy,
67+
Data: []byte(`{
68+
"Type": "ACL",
69+
"Protocols": "TCP",
70+
"Direction": "In",
71+
"Action": "Allow"
72+
}`),
73+
}
74+
expectedPolicy := `{"Protocols":"TCP","Action":"Allow","Direction":"In"}`
75+
76+
generatedPolicy, err := GetHcnACLPolicy(policy)
77+
Expect(err).To(BeNil())
78+
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
79+
})
80+
})
81+
82+
Describe("Test GetHcnOutBoundNATPolicy", func() {
83+
It("Should raise error for invalid json", func() {
84+
policy := Policy{
85+
Type: OutBoundNatPolicy,
86+
Data: []byte(`invalid json`),
87+
}
88+
89+
_, err := GetHcnOutBoundNATPolicy(policy, nil)
90+
Expect(err).NotTo(BeNil())
91+
})
92+
93+
It("Should marshall the OutBoundNAT policy correctly", func() {
94+
policy := Policy{
95+
Type: OutBoundNatPolicy,
96+
Data: []byte(`{
97+
"Type": "OutBoundNAT",
98+
"ExceptionList": ["10.240.0.0/16","10.0.0.0/8"]
99+
}`),
100+
}
101+
expectedPolicy := `{"Exceptions":["10.240.0.0/16","10.0.0.0/8"]}`
102+
103+
generatedPolicy, err := GetHcnOutBoundNATPolicy(policy, nil)
104+
Expect(err).To(BeNil())
105+
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
106+
107+
// test getHncOutBoundNATPolicy with epInfoData
108+
expectedPolicy = `{"Exceptions":["10.240.0.0/16","10.0.0.0/8","50.1.1.1","60.1.1.1"]}`
109+
110+
epInfoData := make(map[string]interface{})
111+
epInfoData[CnetAddressSpace] = []string{"50.1.1.1", "60.1.1.1"}
112+
generatedPolicy, err = GetHcnOutBoundNATPolicy(policy, epInfoData)
113+
Expect(err).To(BeNil())
114+
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
115+
})
116+
})
117+
118+
Describe("Test GetHcnRoutePolicy", func() {
119+
It("Should raise error for invalid json", func() {
120+
policy := Policy{
121+
Type: RoutePolicy,
122+
Data: []byte(`invalid json`),
123+
}
124+
125+
_, err := GetHcnRoutePolicy(policy)
126+
Expect(err).NotTo(BeNil())
127+
})
128+
129+
It("Should marshall the Route policy correctly", func() {
130+
policy := Policy{
131+
Type: RoutePolicy,
132+
Data: []byte(`{
133+
"Type": "ROUTE",
134+
"DestinationPrefix": "10.0.0.0/8",
135+
"NeedEncap": true
136+
}`),
137+
}
138+
expectedPolicy := `{"DestinationPrefix":"10.0.0.0/8","NeedEncap":true}`
139+
140+
generatedPolicy, err := GetHcnRoutePolicy(policy)
141+
Expect(err).To(BeNil())
142+
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
48143
})
49144
})
50145

@@ -57,4 +152,138 @@ var _ = Describe("Windows Policies", func() {
57152
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
58153
})
59154
})
155+
156+
Describe("Test AddNATPolicyV1", func() {
157+
It("Should marshall the NAT policy v1 correctly", func() {
158+
expectedPolicy := `{"Type":"OutBoundNAT","Destinations":["168.63.129.16"]}`
159+
160+
generatedPolicy, err := AddDnsNATPolicyV1()
161+
Expect(err).To(BeNil())
162+
Expect(string(generatedPolicy)).To(Equal(expectedPolicy))
163+
})
164+
})
165+
166+
Describe("Test AddNATPolicyV2", func() {
167+
It("Should marshall the NAT policy v2 correctly", func() {
168+
vip := "vip"
169+
destinations := []string{"192.168.1.1", "192.169.1.1"}
170+
171+
expectedPolicy := `{"VirtualIP":"vip","Destinations":["192.168.1.1","192.169.1.1"]}`
172+
173+
generatedPolicy, err := AddNATPolicyV2(vip, destinations)
174+
Expect(err).To(BeNil())
175+
Expect(string(generatedPolicy.Settings)).To(Equal(expectedPolicy))
176+
})
177+
})
178+
179+
Describe("Test GetHcnEndpointPolicies", func() {
180+
It("Should marshall the policy correctly", func() {
181+
testPolicies := []Policy{}
182+
183+
rawPortMappingPolicy, _ := json.Marshal(&hcn.PortMappingPolicySetting{
184+
ExternalPort: 8008,
185+
InternalPort: 8080,
186+
})
187+
188+
portMappingPolicy, _ := json.Marshal(&hcn.EndpointPolicy{
189+
Type: hcn.PortMapping,
190+
Settings: rawPortMappingPolicy,
191+
})
192+
193+
hnsPolicy := Policy{
194+
Type: PortMappingPolicy,
195+
Data: portMappingPolicy,
196+
}
197+
198+
testPolicies = append(testPolicies, hnsPolicy)
199+
200+
generatedPolicy, err := GetHcnEndpointPolicies(PortMappingPolicy, testPolicies, nil, false, true, nil)
201+
Expect(err).To(BeNil())
202+
Expect(string(generatedPolicy[0].Settings)).To(Equal(string(rawPortMappingPolicy)))
203+
})
204+
})
205+
206+
Describe("Test GetHcnEndpointPolicies with invalid policy type", func() {
207+
It("Should return error with invalid policy type", func() {
208+
testPolicies := []Policy{}
209+
210+
rawPortMappingPolicy, _ := json.Marshal(&hcn.PortMappingPolicySetting{
211+
ExternalPort: 8008,
212+
InternalPort: 8080,
213+
})
214+
215+
portMappingPolicy, _ := json.Marshal(&hcn.EndpointPolicy{
216+
Type: "invalidType", // should return error with invalid policy type
217+
Settings: rawPortMappingPolicy,
218+
})
219+
220+
hnsPolicy := Policy{
221+
Type: PortMappingPolicy,
222+
Data: portMappingPolicy,
223+
}
224+
225+
testPolicies = append(testPolicies, hnsPolicy)
226+
227+
_, err := GetHcnEndpointPolicies(PortMappingPolicy, testPolicies, nil, false, true, nil)
228+
Expect(err).NotTo(BeNil())
229+
})
230+
})
231+
232+
Describe("Test GetHcnEndpointPolicies with multiple policies", func() {
233+
It("Should marshall all policies correctly", func() {
234+
testPolicies := []Policy{}
235+
236+
// add first portMapping policy to testPolicies
237+
rawPortMappingPolicyOne, _ := json.Marshal(&hcn.PortMappingPolicySetting{
238+
ExternalPort: 8008,
239+
InternalPort: 8080,
240+
})
241+
242+
portMappingPolicyOne, _ := json.Marshal(&hcn.EndpointPolicy{
243+
Type: hcn.PortMapping,
244+
Settings: rawPortMappingPolicyOne,
245+
})
246+
247+
portMappinghnsPolicyOne := Policy{
248+
Type: PortMappingPolicy,
249+
Data: portMappingPolicyOne,
250+
}
251+
252+
testPolicies = append(testPolicies, portMappinghnsPolicyOne)
253+
254+
// add second portMapping policy to testPolicies
255+
rawPortMappingPolicyTwo, _ := json.Marshal(&hcn.PortMappingPolicySetting{
256+
ExternalPort: 9008,
257+
InternalPort: 9090,
258+
})
259+
260+
portMappingPolicyTwo, _ := json.Marshal(&hcn.EndpointPolicy{
261+
Type: hcn.PortMapping,
262+
Settings: rawPortMappingPolicyTwo,
263+
})
264+
265+
portMappinghnsPolicyTwo := Policy{
266+
Type: PortMappingPolicy,
267+
Data: portMappingPolicyTwo,
268+
}
269+
270+
testPolicies = append(testPolicies, portMappinghnsPolicyTwo)
271+
272+
generatedPolicy, err := GetHcnEndpointPolicies(PortMappingPolicy, testPolicies, nil, false, true, nil)
273+
Expect(err).To(BeNil())
274+
275+
expectedPolicy := []hcn.EndpointPolicy{
276+
{
277+
Type: "PortMapping",
278+
Settings: []byte(`{"InternalPort":8080,"ExternalPort":8008}`),
279+
},
280+
{
281+
Type: "PortMapping",
282+
Settings: []byte(`{"InternalPort":9090,"ExternalPort":9008}`),
283+
},
284+
}
285+
286+
Expect(generatedPolicy).To(Equal(expectedPolicy))
287+
})
288+
})
60289
})

0 commit comments

Comments
 (0)