1 /*******************************************************************************
\r
2 * Copyright (c) 2018 Politecnico di Torino and others.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Apache License, Version 2.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.apache.org/licenses/LICENSE-2.0
\r
8 *******************************************************************************/
\r
9 package it.polito.verigraph.grpc.tosca.test;
\r
11 import static org.junit.Assert.assertEquals;
\r
12 import static org.junit.Assert.assertNotNull;
\r
13 import static org.junit.Assert.fail;
\r
15 import java.util.ArrayList;
\r
16 import java.util.List;
\r
18 import org.junit.After;
\r
19 import org.junit.Before;
\r
20 import org.junit.FixMethodOrder;
\r
21 import org.junit.Test;
\r
22 import org.junit.runner.RunWith;
\r
23 import org.junit.runners.JUnit4;
\r
24 import org.junit.runners.MethodSorters;
\r
26 import it.polito.verigraph.grpc.NewTopologyTemplate;
\r
27 import it.polito.verigraph.grpc.NodeTemplateGrpc;
\r
28 import it.polito.verigraph.grpc.NodeTemplateGrpc.Type;
\r
29 import it.polito.verigraph.grpc.RelationshipTemplateGrpc;
\r
30 import it.polito.verigraph.grpc.Status;
\r
31 import it.polito.verigraph.grpc.TopologyTemplateGrpc;
\r
32 import it.polito.verigraph.grpc.ToscaConfigurationGrpc;
\r
33 import it.polito.verigraph.grpc.ToscaPolicy;
\r
34 import it.polito.verigraph.grpc.ToscaPolicy.PolicyType;
\r
35 import it.polito.verigraph.grpc.ToscaVerificationGrpc;
\r
36 import it.polito.verigraph.grpc.client.ToscaClient;
\r
37 import it.polito.verigraph.grpc.server.Service;
\r
39 @RunWith(JUnit4.class)
\r
40 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
\r
41 public class GrpcToscaTest {
\r
42 private Service server;
\r
43 private ToscaClient client;
\r
44 private TopologyTemplateGrpc testTemplate, simpleTestTemplate;
\r
46 public GrpcToscaTest() {
\r
47 this.generateTestTemplate();
\r
51 public void setUpBeforeClass() throws Exception {
\r
52 client = new ToscaClient("localhost" , 50051);
\r
53 server = new Service(50051);
\r
58 public void tearDown() throws Exception {
\r
65 public void test0Creation() {
\r
66 System.out.println("\nTest A: Graph Creation.");
\r
68 NewTopologyTemplate response = client.createTopologyTemplate(testTemplate);
\r
69 assertNotNull("Returned a NULL graph", response);
\r
70 assertEquals(response.getSuccess(), true);
\r
71 assertEquals("Error report: " + response.getErrorMessage(), "", response.getErrorMessage());
\r
73 Status resp = client.deleteTopologyTemplate(response.getTopologyTemplate().getId());
\r
74 assertEquals("Error while deleting testTemplate.", true, resp.getSuccess());
\r
76 System.out.println("Test A completed\n");
\r
83 public void test1Reading() {
\r
84 System.out.println("\nTest B: Graph Reading.");
\r
86 //Creating a test graph on remote repository
\r
87 System.out.println("Phase B.1 -- Creating a test graph.");
\r
88 NewTopologyTemplate response = client.createTopologyTemplate(simpleTestTemplate);
\r
89 assertNotNull("Returned a NULL graph", response);
\r
90 assertEquals(true, response.getSuccess());
\r
91 assertEquals("Error report: " + response.getErrorMessage(), "", response.getErrorMessage());
\r
93 //Reading remote graph.
\r
94 System.out.println("Phase B.2 -- Reading remote graph.");
\r
95 TopologyTemplateGrpc retrieved = client.getTopologyTemplate(response.getTopologyTemplate().getId());
\r
96 assertNotNull("Retrieved a NULL graph", retrieved);
\r
97 assertEquals(retrieved.getId(), response.getTopologyTemplate().getId());
\r
100 System.out.println("Phase B.3 -- Checking graph's nodes.");
\r
101 assertEquals(retrieved.getNodeTemplateCount(), 3);
\r
102 assertEquals("Node1 name error", response.getTopologyTemplate().getNodeTemplateList().get(0).getName(),
\r
103 retrieved.getNodeTemplateList().get(0).getName());
\r
104 assertEquals("Node2 name error", response.getTopologyTemplate().getNodeTemplateList().get(1).getName(),
\r
105 retrieved.getNodeTemplateList().get(1).getName());
\r
106 assertEquals("Node3 name error", response.getTopologyTemplate().getNodeTemplateList().get(2).getName(),
\r
107 retrieved.getNodeTemplateList().get(2).getName());
\r
109 //Relationships checking
\r
110 System.out.println("Phase B.4 -- Checking graph's relationships.");
\r
111 assertEquals(retrieved.getRelationshipTemplateCount(), 4);
\r
112 String source1=null, target1=null;
\r
113 String source2=null, target2=null;
\r
114 String source3=null, target3=null;
\r
115 String source4=null, target4=null;
\r
116 for (NodeTemplateGrpc node : retrieved.getNodeTemplateList()){
\r
117 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(0).getIdSourceNodeTemplate()))
\r
118 source1=node.getName();
\r
119 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(0).getIdTargetNodeTemplate()))
\r
120 target1=node.getName();
\r
121 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(1).getIdSourceNodeTemplate()))
\r
122 source2=node.getName();
\r
123 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(1).getIdTargetNodeTemplate()))
\r
124 target2=node.getName();
\r
125 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(2).getIdSourceNodeTemplate()))
\r
126 source3=node.getName();
\r
127 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(2).getIdTargetNodeTemplate()))
\r
128 target3=node.getName();
\r
129 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(3).getIdSourceNodeTemplate()))
\r
130 source4=node.getName();
\r
131 if(node.getId().equals(retrieved.getRelationshipTemplateList().get(3).getIdTargetNodeTemplate()))
\r
132 target4=node.getName();
\r
135 assertEquals("Relat1 name error", retrieved.getRelationshipTemplateList().get(0).getName(), source1+"to"+target1);
\r
136 assertEquals("Relat2 name error", retrieved.getRelationshipTemplateList().get(1).getName(), source2+"to"+target2);
\r
137 assertEquals("Relat3 name error", retrieved.getRelationshipTemplateList().get(2).getName(), source3+"to"+target3);
\r
138 assertEquals("Relat4 name error", retrieved.getRelationshipTemplateList().get(3).getName(), source4+"to"+target4);
\r
140 System.out.println("Phase B.5 -- Deleting graph.");
\r
141 Status resp = client.deleteTopologyTemplate(response.getTopologyTemplate().getId());
\r
142 assertEquals("Error while deleting simpleTestTemplate", true, resp.getSuccess());
\r
145 System.out.println("Test B completed.\n");
\r
150 public void test2Update() {
\r
151 System.out.println("\nTest C: Update.");
\r
153 //Creating a test graph on remote repository
\r
154 System.out.println("Phase C.1 -- Creating a test graph.");
\r
155 NewTopologyTemplate response = client.createTopologyTemplate(simpleTestTemplate);
\r
156 assertNotNull("Returned a NULL graph", response);
\r
157 assertEquals(true, response.getSuccess());
\r
158 assertEquals("Error report: " + response.getErrorMessage(), "", response.getErrorMessage());
\r
160 //Reading remote graph.
\r
161 System.out.println("Phase C.2 -- Reading remote graph.");
\r
162 TopologyTemplateGrpc retrieved = client.getTopologyTemplate(response.getTopologyTemplate().getId());
\r
163 assertNotNull("Retrieved a NULL graph", retrieved);
\r
164 assertEquals(retrieved.getId(), response.getTopologyTemplate().getId());
\r
166 //Updating a TopologyTemplateGrpc
\r
167 System.out.println("Phase C.3 -- Updating a test graph.");
\r
168 TopologyTemplateGrpc.Builder templ = TopologyTemplateGrpc.newBuilder();
\r
169 List<NodeTemplateGrpc> nodes = new ArrayList<NodeTemplateGrpc>();
\r
170 List<RelationshipTemplateGrpc> relats = new ArrayList<RelationshipTemplateGrpc>();
\r
172 ToscaConfigurationGrpc node1conf = ToscaConfigurationGrpc.newBuilder().setDescription("node1configuration")
\r
173 .setId("15").setConfiguration("[]").build();
\r
174 NodeTemplateGrpc node1 = NodeTemplateGrpc.newBuilder().setConfiguration(node1conf).setId("999")
\r
175 .setName("webserver1").setType(Type.webserver).build();
\r
178 ToscaConfigurationGrpc node2conf = ToscaConfigurationGrpc.newBuilder().setDescription("node2configuration")
\r
179 .setId("16").setConfiguration("[{\r\n\"protocol\":\"HTTP_REQUEST\",\r\n \"url\":\"www.facebook.com\"\r\n }]").build();
\r
180 NodeTemplateGrpc node2 = NodeTemplateGrpc.newBuilder().setConfiguration(node2conf).setId("888")
\r
181 .setName("host2").setType(Type.endhost).build();
\r
184 RelationshipTemplateGrpc rel0 = RelationshipTemplateGrpc.newBuilder().setId("1001")
\r
185 .setIdSourceNodeTemplate("999").setIdTargetNodeTemplate("888").setName("webserver1tohost2").build();
\r
188 RelationshipTemplateGrpc rel1 = RelationshipTemplateGrpc.newBuilder().setId("1002")
\r
189 .setIdSourceNodeTemplate("888").setIdTargetNodeTemplate("999").setName("host2towebserver1").build();
\r
192 TopologyTemplateGrpc newTestTemplate = templ.addAllNodeTemplate(nodes).addAllRelationshipTemplate(relats).setId("9").build();
\r
193 NewTopologyTemplate updated = client.updateTopologyTemplate(newTestTemplate, response.getTopologyTemplate().getId());
\r
194 assertNotNull("Returned a NULL graph", updated);
\r
195 assertEquals(true, updated.getSuccess());
\r
196 assertEquals("Error report: " + updated.getErrorMessage(), "", updated.getErrorMessage());
\r
198 //Reading remote graph.
\r
199 System.out.println("Phase C.4 -- Reading remote graph.");
\r
200 TopologyTemplateGrpc retrieved2 = client.getTopologyTemplate(response.getTopologyTemplate().getId());
\r
201 assertNotNull("Retrieved a NULL graph", retrieved2);
\r
202 assertEquals(retrieved2.getId(), response.getTopologyTemplate().getId());
\r
205 System.out.println("Phase C.5 -- Checking updated graph's nodes.");
\r
206 assertEquals(retrieved2.getNodeTemplateCount(), 2);
\r
207 assertEquals("Node1 name error", updated.getTopologyTemplate().getNodeTemplateList().get(0).getName(),
\r
208 retrieved2.getNodeTemplateList().get(0).getName());
\r
209 assertEquals("Node2 name error", updated.getTopologyTemplate().getNodeTemplateList().get(1).getName(),
\r
210 retrieved2.getNodeTemplateList().get(1).getName());
\r
212 //Relationships checking
\r
213 System.out.println("Phase C.6 -- Checking updated graph's relationships.");
\r
214 assertEquals(retrieved2.getRelationshipTemplateCount(), 2);
\r
215 String source1=null, target1=null;
\r
216 String source2=null, target2=null;
\r
217 for (NodeTemplateGrpc node : retrieved2.getNodeTemplateList()){
\r
218 if(node.getId().equals(retrieved2.getRelationshipTemplateList().get(0).getIdSourceNodeTemplate()))
\r
219 source1=node.getName();
\r
220 if(node.getId().equals(retrieved2.getRelationshipTemplateList().get(0).getIdTargetNodeTemplate()))
\r
221 target1=node.getName();
\r
222 if(node.getId().equals(retrieved2.getRelationshipTemplateList().get(1).getIdSourceNodeTemplate()))
\r
223 source2=node.getName();
\r
224 if(node.getId().equals(retrieved2.getRelationshipTemplateList().get(1).getIdTargetNodeTemplate()))
\r
225 target2=node.getName();
\r
228 assertEquals("Relat1 name error", retrieved2.getRelationshipTemplateList().get(0).getName(), source1+"to"+target1);
\r
229 assertEquals("Relat2 name error", retrieved2.getRelationshipTemplateList().get(1).getName(), source2+"to"+target2);
\r
231 System.out.println("Phase C.6 -- Deleting graph.");
\r
232 Status resp = client.deleteTopologyTemplate(updated.getTopologyTemplate().getId());
\r
233 assertEquals("Error while deleting simpleTestTemplate", true, resp.getSuccess());
\r
235 System.out.println("Test C completed.\n");
\r
241 public void test3Verification() {
\r
242 System.out.println("\nTest D: Verification.");
\r
243 NewTopologyTemplate response = client.createTopologyTemplate(testTemplate);
\r
244 if(response == null | response.getSuccess() != true) {
\r
245 fail("Test failed, unable to load the graph.");
\r
249 //The Id of the graph on which we are going to perform tests
\r
250 String testTemplateId = response.getTopologyTemplate().getId();
\r
252 //REACHABILITY test
\r
253 System.out.println("Phase 1.1 - Reachability SAT.");
\r
254 ToscaPolicy policy = ToscaPolicy.newBuilder().setIdTopologyTemplate(testTemplateId)
\r
255 .setType(PolicyType.reachability).setSource("host2").setDestination("host1").build();
\r
256 ToscaVerificationGrpc result = client.verifyPolicy(policy);
\r
257 assertNotNull("There was no response", result);
\r
258 assertEquals("Unexpected result : " + result.getResult() + " - " + result.getComment(), "SAT", result.getResult());
\r
259 assertEquals("Error report: " + result.getErrorMessage(), "", result.getErrorMessage());
\r
262 System.out.println("Phase 1.2 - Reachability UNSAT.");
\r
263 policy = ToscaPolicy.newBuilder().setIdTopologyTemplate(testTemplateId)
\r
264 .setType(PolicyType.reachability).setSource("host1").setDestination("antispamNode1").build();
\r
265 result = client.verifyPolicy(policy);
\r
266 assertNotNull("There was no response", result);
\r
267 assertEquals("Unexpected result : " + result.getResult() + " - " + result.getComment(), "UNSAT", result.getResult());
\r
268 assertEquals("Error report: " + result.getErrorMessage(), "", result.getErrorMessage());
\r
272 System.out.println("Phase 2.1 - Isolation SAT.");
\r
273 policy = ToscaPolicy.newBuilder().setIdTopologyTemplate(testTemplateId)
\r
274 .setType(PolicyType.isolation).setSource("host2").setDestination("host1").setMiddlebox("webserver1").build();
\r
275 result = client.verifyPolicy(policy);
\r
276 assertNotNull("There was no response", result);
\r
277 assertEquals("Unexpected result : " + result.getResult() + " - " + result.getComment(), "SAT", result.getResult());
\r
278 assertEquals("Error report: " + result.getErrorMessage(), "", result.getErrorMessage());
\r
280 System.out.println("Phase 2.2 - Isolation UNSAT.");
\r
281 policy = ToscaPolicy.newBuilder().setIdTopologyTemplate(testTemplateId)
\r
282 .setType(PolicyType.isolation).setSource("host2").setDestination("host1").setMiddlebox("fw").build();
\r
283 result = client.verifyPolicy(policy);
\r
284 assertNotNull("There was no response", result);
\r
285 assertEquals("Unexpected result : " + result.getResult() + " - " + result.getComment(), "UNSAT", result.getResult());
\r
286 assertEquals("Error report: " + result.getErrorMessage(), "", result.getErrorMessage());
\r
290 System.out.println("Phase 3.1 - Traversal SAT.");
\r
291 policy = ToscaPolicy.newBuilder().setIdTopologyTemplate(testTemplateId)
\r
292 .setType(PolicyType.traversal).setSource("host2").setDestination("host1").setMiddlebox("fw").build();
\r
293 result = client.verifyPolicy(policy);
\r
294 assertNotNull("There was no response", result);
\r
295 assertEquals("Unexpected result : " + result.getResult() + " - " + result.getComment(), "SAT", result.getResult());
\r
296 assertEquals("Error report: " + result.getErrorMessage(), "", result.getErrorMessage());
\r
298 System.out.println("Phase 3.2 - Traversal UNSAT.");
\r
299 policy = ToscaPolicy.newBuilder().setIdTopologyTemplate(testTemplateId)
\r
300 .setType(PolicyType.traversal).setSource("host2").setDestination("webserver1").setMiddlebox("fw").build();
\r
301 result = client.verifyPolicy(policy);
\r
302 assertNotNull("There was no response", result);
\r
303 assertEquals("Unexpected result : " + result.getResult() + " - " + result.getComment(), "UNSAT", result.getResult());
\r
304 assertEquals("Error report: " + result.getErrorMessage(), "", result.getErrorMessage());
\r
306 Status resp = client.deleteTopologyTemplate(testTemplateId);
\r
307 assertEquals("Error while deleting testTemplate", true, resp.getSuccess());
\r
309 System.out.println("Test D completed.\n");
\r
315 public void test4Deletion() {
\r
316 System.out.println("\nTest E: Deletion");
\r
317 NewTopologyTemplate templ = client.createTopologyTemplate(testTemplate);
\r
319 if(templ.getSuccess() != true) {
\r
320 fail("Unable to create the graph.");
\r
323 Status resp = client.deleteTopologyTemplate(templ.getTopologyTemplate().getId());
\r
324 assertEquals("Error while deleting testTemplate", true, resp.getSuccess());
\r
327 System.out.println("Test E completed.\n");
\r
332 //Generates a correct instance of a TopologyTemplateGrpc to be used in tests
\r
333 public void generateTestTemplate() {
\r
334 TopologyTemplateGrpc.Builder templ = TopologyTemplateGrpc.newBuilder();
\r
335 List<NodeTemplateGrpc> nodes = new ArrayList<NodeTemplateGrpc>();
\r
336 List<RelationshipTemplateGrpc> relats = new ArrayList<RelationshipTemplateGrpc>();
\r
338 //Definition of nodes
\r
339 ToscaConfigurationGrpc node0conf = ToscaConfigurationGrpc.newBuilder().setDescription("node0configuration")
\r
340 .setId("100").setConfiguration("[{\r\n\"webserver1\":\"host2\"\r\n}]").build();
\r
341 NodeTemplateGrpc node0 = NodeTemplateGrpc.newBuilder().setConfiguration(node0conf).setId("100")
\r
342 .setName("fw").setType(Type.firewall).build();
\r
345 ToscaConfigurationGrpc node1conf = ToscaConfigurationGrpc.newBuilder().setDescription("node1configuration")
\r
346 .setId("101").setConfiguration("[]").build();
\r
347 NodeTemplateGrpc node1 = NodeTemplateGrpc.newBuilder().setConfiguration(node1conf).setId("101")
\r
348 .setName("webserver1").setType(Type.webserver).build();
\r
351 ToscaConfigurationGrpc node2conf = ToscaConfigurationGrpc.newBuilder().setDescription("node2configuration")
\r
352 .setId("102").setConfiguration("[{\r\n\"protocol\":\"HTTP_REQUEST\",\r\n \"url\":\"www.facebook.com\"\r\n }]").build();
\r
353 NodeTemplateGrpc node2 = NodeTemplateGrpc.newBuilder().setConfiguration(node2conf).setId("102")
\r
354 .setName("host2").setType(Type.endhost).build();
\r
357 ToscaConfigurationGrpc node3conf = ToscaConfigurationGrpc.newBuilder().setDescription("node3configuration")
\r
358 .setId("103").setConfiguration("[ {\r\n\"protocol\":\"HTTP_REQUEST\",\r\n\"url\":\"www.google.com\",\r\n\"destination\":\"server1\"\r\n}]").build();
\r
359 NodeTemplateGrpc node3 = NodeTemplateGrpc.newBuilder().setConfiguration(node3conf).setId("103")
\r
360 .setName("host1").setType(Type.endhost).build();
\r
363 ToscaConfigurationGrpc node4conf = ToscaConfigurationGrpc.newBuilder().setDescription("node4configuration")
\r
364 .setId("104").setConfiguration("[\"host1\",\"host2\"]").build();
\r
365 NodeTemplateGrpc node4 = NodeTemplateGrpc.newBuilder().setConfiguration(node4conf).setId("104")
\r
366 .setName("antispamNode1").setType(Type.antispam).build();
\r
369 //Building relationships
\r
370 RelationshipTemplateGrpc rel0 = RelationshipTemplateGrpc.newBuilder().setId("1001")
\r
371 .setIdSourceNodeTemplate("100").setIdTargetNodeTemplate("101").setName("fwToServ1").build();
\r
374 RelationshipTemplateGrpc rel1 = RelationshipTemplateGrpc.newBuilder().setId("1002")
\r
375 .setIdSourceNodeTemplate("101").setIdTargetNodeTemplate("100").setName("serv1ToFw").build();
\r
378 RelationshipTemplateGrpc rel2 = RelationshipTemplateGrpc.newBuilder().setId("1003")
\r
379 .setIdSourceNodeTemplate("100").setIdTargetNodeTemplate("103").setName("fwToHost1").build();
\r
382 RelationshipTemplateGrpc rel3 = RelationshipTemplateGrpc.newBuilder().setId("1004")
\r
383 .setIdSourceNodeTemplate("100").setIdTargetNodeTemplate("102").setName("fwToHost2").build();
\r
386 RelationshipTemplateGrpc rel4 = RelationshipTemplateGrpc.newBuilder().setId("1005")
\r
387 .setIdSourceNodeTemplate("102").setIdTargetNodeTemplate("100").setName("Host2Tofw").build();
\r
390 RelationshipTemplateGrpc rel5 = RelationshipTemplateGrpc.newBuilder().setId("1006")
\r
391 .setIdSourceNodeTemplate("103").setIdTargetNodeTemplate("100").setName("Host1Tofw").build();
\r
394 this.testTemplate = templ.addAllNodeTemplate(nodes).addAllRelationshipTemplate(relats).setId("0").build();
\r
396 TopologyTemplateGrpc.Builder templ2 = TopologyTemplateGrpc.newBuilder();
\r
397 List<NodeTemplateGrpc> nodes2 = new ArrayList<NodeTemplateGrpc>();
\r
398 List<RelationshipTemplateGrpc> relats2 = new ArrayList<RelationshipTemplateGrpc>();
\r
407 this.simpleTestTemplate = templ2.addAllNodeTemplate(nodes2).addAllRelationshipTemplate(relats2).setId("1").build();
\r
411 /*class NodeTemplateGrpcComparator implements Comparator<NodeTemplateGrpc> {
\r
412 public int compare(NodeTemplateGrpc n0, NodeTemplateGrpc n1) {
\r
413 return n0.getName().compareTo(n1.getName());
\r
417 class RelationshipTemplateGrpcComparator implements Comparator<RelationshipTemplateGrpc> {
\r
418 public int compare(RelationshipTemplateGrpc n0, RelationshipTemplateGrpc n1) {
\r
419 int source = n0.getIdSourceNodeTemplate().compareTo(n1.getIdSourceNodeTemplate());
\r
420 int target = n0.getIdTargetNodeTemplate().compareTo(n1.getIdTargetNodeTemplate());
\r
421 return source + target;
\r