...
1
2
3
4 package hcn
5
6 import (
7 "encoding/json"
8 "errors"
9 "fmt"
10 "testing"
11 )
12
13 type HcnNetworkMakerFunc func() (*HostComputeNetwork, error)
14
15 func TestCreateDeleteNetworks(t *testing.T) {
16 var netMaker HcnNetworkMakerFunc = HcnCreateTestNATNetwork
17 err := CreateDeleteNetworksHelper(t, netMaker)
18 if err != nil {
19 t.Fatal(err)
20 }
21 err = CreateDeleteNetworksHelper(t, func() (*HostComputeNetwork, error) { return HcnCreateTestNATNetworkWithSubnet(nil) })
22 if err != nil {
23 t.Fatal(err)
24 }
25
26 snet1 := CreateSubnet("192.168.100.0/24", "192.168.100.1", "1.1.1.1/0")
27 err = CreateDeleteNetworksHelper(t, func() (*HostComputeNetwork, error) { return HcnCreateTestNATNetworkWithSubnet(snet1) })
28 if err == nil {
29 t.Fatal(errors.New("expected failure for subnet with no default gateway provided"))
30 }
31 snet2 := CreateSubnet("192.168.100.0/24", "", "")
32 err = CreateDeleteNetworksHelper(t, func() (*HostComputeNetwork, error) { return HcnCreateTestNATNetworkWithSubnet(snet2) })
33 if err == nil {
34 t.Fatal(errors.New("expected failure for subnet with no nexthop provided but a gateway provided"))
35 }
36 }
37
38 func CreateDeleteNetworksHelper(t *testing.T, networkFunction HcnNetworkMakerFunc) error {
39 t.Helper()
40 network, err := networkFunction()
41 if err != nil {
42 return err
43 }
44 jsonString, err := json.Marshal(network)
45 if err != nil {
46 t.Fatal(err)
47 }
48 fmt.Printf("Network JSON:\n%s \n", jsonString)
49 err = network.Delete()
50 if err != nil {
51 return err
52 }
53 return nil
54 }
55
56 func TestGetNetworkByName(t *testing.T) {
57 network, err := HcnCreateTestNATNetwork()
58 if err != nil {
59 t.Fatal(err)
60 }
61 network, err = GetNetworkByName(network.Name)
62 if err != nil {
63 t.Fatal(err)
64 }
65 if network == nil {
66 t.Fatal("No Network found")
67 }
68 err = network.Delete()
69 if err != nil {
70 t.Fatal(err)
71 }
72 }
73
74 func TestGetNetworkById(t *testing.T) {
75 network, err := HcnCreateTestNATNetwork()
76 if err != nil {
77 t.Fatal(err)
78 }
79 network, err = GetNetworkByID(network.Id)
80 if err != nil {
81 t.Fatal(err)
82 }
83 if network == nil {
84 t.Fatal("No Network found")
85 }
86 err = network.Delete()
87 if err != nil {
88 t.Fatal(err)
89 }
90 }
91
92 func TestListNetwork(t *testing.T) {
93 _, err := ListNetworks()
94 if err != nil {
95 t.Fatal(err)
96 }
97 }
98
99 func testNetworkPolicy(t *testing.T, policiesToTest *PolicyNetworkRequest) {
100 t.Helper()
101 network, err := CreateTestOverlayNetwork()
102 if err != nil {
103 t.Fatal(err)
104 }
105
106 _ = network.AddPolicy(*policiesToTest)
107
108
109 network, err = GetNetworkByID(network.Id)
110 if err != nil {
111 t.Fatal(err)
112 }
113
114 for _, policyToTest := range policiesToTest.Policies {
115 foundPolicy := false
116 for _, policy := range network.Policies {
117 if policy.Type == policyToTest.Type {
118 foundPolicy = true
119 break
120 }
121 }
122 if !foundPolicy {
123 t.Fatalf("Could not find %s policy on network.", policyToTest.Type)
124 }
125 }
126
127 _ = network.RemovePolicy(*policiesToTest)
128
129
130 network, err = GetNetworkByID(network.Id)
131 if err != nil {
132 t.Fatal(err)
133 }
134
135 for _, policyToTest := range policiesToTest.Policies {
136 foundPolicy := false
137 for _, policy := range network.Policies {
138 if policy.Type == policyToTest.Type {
139 foundPolicy = true
140 break
141 }
142 }
143 if foundPolicy {
144 t.Fatalf("Found %s policy on network when it should have been deleted.", policyToTest.Type)
145 }
146 }
147
148 err = network.Delete()
149 if err != nil {
150 t.Fatal(err)
151 }
152 }
153
154 func TestAddRemoveRemoteSubnetRoutePolicy(t *testing.T) {
155 remoteSubnetRoutePolicy, err := HcnCreateTestRemoteSubnetRoute()
156 if err != nil {
157 t.Fatal(err)
158 }
159
160 testNetworkPolicy(t, remoteSubnetRoutePolicy)
161 }
162
163 func TestAddRemoveHostRoutePolicy(t *testing.T) {
164 hostRoutePolicy, err := HcnCreateTestHostRoute()
165 if err != nil {
166 t.Fatal(err)
167 }
168
169 testNetworkPolicy(t, hostRoutePolicy)
170 }
171
172 func TestAddRemoveNetworACLPolicy(t *testing.T) {
173 networkACLPolicy, err := HcnCreateNetworkACLs()
174 if err != nil {
175 t.Fatal(err)
176 }
177
178 testNetworkPolicy(t, networkACLPolicy)
179 }
180
181 func TestNetworkFlags(t *testing.T) {
182 network, err := CreateTestOverlayNetwork()
183 if err != nil {
184 t.Fatal(err)
185 }
186
187
188 network, err = GetNetworkByID(network.Id)
189 if err != nil {
190 t.Fatal(err)
191 }
192
193 if network.Flags != EnableNonPersistent {
194 t.Errorf("EnableNonPersistent flag (%d) is not set on network", EnableNonPersistent)
195 }
196
197 err = network.Delete()
198 if err != nil {
199 t.Fatal(err)
200 }
201 }
202
View as plain text