1// +build integration
2
3package hcn
4
5import (
6	"encoding/json"
7	"fmt"
8	"testing"
9)
10
11func TestCreateDeleteEndpoint(t *testing.T) {
12	network, err := HcnCreateTestNATNetwork()
13	if err != nil {
14		t.Fatal(err)
15	}
16	Endpoint, err := HcnCreateTestEndpoint(network)
17	if err != nil {
18		t.Fatal(err)
19	}
20	jsonString, err := json.Marshal(Endpoint)
21	if err != nil {
22		t.Fatal(err)
23	}
24	fmt.Printf("Endpoint JSON:\n%s \n", jsonString)
25
26	err = Endpoint.Delete()
27	if err != nil {
28		t.Fatal(err)
29	}
30	err = network.Delete()
31	if err != nil {
32		t.Fatal(err)
33	}
34}
35
36func TestGetEndpointById(t *testing.T) {
37	network, err := HcnCreateTestNATNetwork()
38	if err != nil {
39		t.Fatal(err)
40	}
41	Endpoint, err := HcnCreateTestEndpoint(network)
42	if err != nil {
43		t.Fatal(err)
44	}
45
46	foundEndpoint, err := GetEndpointByID(Endpoint.Id)
47	if err != nil {
48		t.Fatal(err)
49	}
50	if foundEndpoint == nil {
51		t.Fatal("No Endpoint found")
52	}
53
54	err = foundEndpoint.Delete()
55	if err != nil {
56		t.Fatal(err)
57	}
58	err = network.Delete()
59	if err != nil {
60		t.Fatal(err)
61	}
62}
63
64func TestGetEndpointByName(t *testing.T) {
65	network, err := HcnCreateTestNATNetwork()
66	if err != nil {
67		t.Fatal(err)
68	}
69	Endpoint, err := HcnCreateTestEndpoint(network)
70	if err != nil {
71		t.Fatal(err)
72	}
73
74	foundEndpoint, err := GetEndpointByName(Endpoint.Name)
75	if err != nil {
76		t.Fatal(err)
77	}
78	if foundEndpoint == nil {
79		t.Fatal("No Endpoint found")
80	}
81
82	err = foundEndpoint.Delete()
83	if err != nil {
84		t.Fatal(err)
85	}
86	err = network.Delete()
87	if err != nil {
88		t.Fatal(err)
89	}
90}
91
92func TestListEndpoints(t *testing.T) {
93	network, err := HcnCreateTestNATNetwork()
94	if err != nil {
95		t.Fatal(err)
96	}
97	Endpoint, err := HcnCreateTestEndpoint(network)
98	if err != nil {
99		t.Fatal(err)
100	}
101
102	foundEndpoints, err := ListEndpoints()
103	if err != nil {
104		t.Fatal(err)
105	}
106	if len(foundEndpoints) == 0 {
107		t.Fatal("No Endpoint found")
108	}
109
110	err = Endpoint.Delete()
111	if err != nil {
112		t.Fatal(err)
113	}
114	err = network.Delete()
115	if err != nil {
116		t.Fatal(err)
117	}
118}
119
120func TestListEndpointsOfNetwork(t *testing.T) {
121	network, err := HcnCreateTestNATNetwork()
122	if err != nil {
123		t.Fatal(err)
124	}
125	Endpoint, err := HcnCreateTestEndpoint(network)
126	if err != nil {
127		t.Fatal(err)
128	}
129
130	foundEndpoints, err := ListEndpointsOfNetwork(network.Id)
131	if err != nil {
132		t.Fatal(err)
133	}
134	if len(foundEndpoints) == 0 {
135		t.Fatal("No Endpoint found")
136	}
137
138	err = Endpoint.Delete()
139	if err != nil {
140		t.Fatal(err)
141	}
142	err = network.Delete()
143	if err != nil {
144		t.Fatal(err)
145	}
146}
147
148func TestEndpointNamespaceAttachDetach(t *testing.T) {
149	network, err := HcnCreateTestNATNetwork()
150	if err != nil {
151		t.Fatal(err)
152	}
153	endpoint, err := HcnCreateTestEndpoint(network)
154	if err != nil {
155		t.Fatal(err)
156	}
157	namespace, err := HcnCreateTestNamespace()
158	if err != nil {
159		t.Fatal(err)
160	}
161
162	err = endpoint.NamespaceAttach(namespace.Id)
163	if err != nil {
164		t.Fatal(err)
165	}
166	err = endpoint.NamespaceDetach(namespace.Id)
167	if err != nil {
168		t.Fatal(err)
169	}
170
171	err = namespace.Delete()
172	if err != nil {
173		t.Fatal(err)
174	}
175	err = endpoint.Delete()
176	if err != nil {
177		t.Fatal(err)
178	}
179	err = network.Delete()
180	if err != nil {
181		t.Fatal(err)
182	}
183}
184
185func TestAddL4WfpProxyPolicyOnEndpoint(t *testing.T) {
186	network, err := HcnCreateTestNATNetwork()
187	if err != nil {
188		t.Fatal(err)
189	}
190	defer func() {
191		err = network.Delete()
192		if err != nil {
193			t.Fatal(err)
194		}
195	}()
196
197	endpoint, err := HcnCreateTestEndpoint(network)
198	if err != nil {
199		t.Fatal(err)
200	}
201	defer func() {
202		err = endpoint.Delete()
203		if err != nil {
204			t.Fatal(err)
205		}
206	}()
207
208	request, err := HcnCreateWfpProxyPolicyRequest()
209	if err != nil {
210		t.Fatal(err)
211	}
212
213	jsonString, err := json.Marshal(*request)
214	if err != nil {
215		t.Fatal(err)
216	}
217	fmt.Printf("WFP Proxy JSON:\n%s \n", jsonString)
218
219	err = endpoint.ApplyPolicy(RequestTypeAdd, *request)
220	if err != nil {
221		t.Fatal(err)
222	}
223}
224
225func TestApplyPolicyOnEndpoint(t *testing.T) {
226	network, err := HcnCreateTestNATNetwork()
227	if err != nil {
228		t.Fatal(err)
229	}
230	Endpoint, err := HcnCreateTestEndpoint(network)
231	if err != nil {
232		t.Fatal(err)
233	}
234	endpointPolicyList, err := HcnCreateAcls()
235	if err != nil {
236		t.Fatal(err)
237	}
238	jsonString, err := json.Marshal(*endpointPolicyList)
239	if err != nil {
240		t.Fatal(err)
241	}
242	fmt.Printf("ACLS JSON:\n%s \n", jsonString)
243	err = Endpoint.ApplyPolicy(RequestTypeUpdate, *endpointPolicyList)
244	if err != nil {
245		t.Fatal(err)
246	}
247
248	foundEndpoint, err := GetEndpointByName(Endpoint.Name)
249	if err != nil {
250		t.Fatal(err)
251	}
252	if len(foundEndpoint.Policies) == 0 {
253		t.Fatal("No Endpoint Policies found")
254	}
255
256	err = Endpoint.Delete()
257	if err != nil {
258		t.Fatal(err)
259	}
260	err = network.Delete()
261	if err != nil {
262		t.Fatal(err)
263	}
264}
265
266func TestModifyEndpointSettings(t *testing.T) {
267	network, err := HcnCreateTestNATNetwork()
268	if err != nil {
269		t.Fatal(err)
270	}
271	endpoint, err := HcnCreateTestEndpoint(network)
272	if err != nil {
273		t.Fatal(err)
274	}
275	endpointPolicy, err := HcnCreateAcls()
276	if err != nil {
277		t.Fatal(err)
278	}
279	settingsJson, err := json.Marshal(endpointPolicy)
280	if err != nil {
281		t.Fatal(err)
282	}
283
284	requestMessage := &ModifyEndpointSettingRequest{
285		ResourceType: EndpointResourceTypePolicy,
286		RequestType:  RequestTypeUpdate,
287		Settings:     settingsJson,
288	}
289
290	err = ModifyEndpointSettings(endpoint.Id, requestMessage)
291	if err != nil {
292		t.Fatal(err)
293	}
294
295	foundEndpoint, err := GetEndpointByName(endpoint.Name)
296	if err != nil {
297		t.Fatal(err)
298	}
299	if len(foundEndpoint.Policies) == 0 {
300		t.Fatal("No Endpoint Policies found")
301	}
302
303	err = endpoint.Delete()
304	if err != nil {
305		t.Fatal(err)
306	}
307	err = network.Delete()
308	if err != nil {
309		t.Fatal(err)
310	}
311}
312