From a42de79292d9541db7865b54e93be2d0b6e6a094 Mon Sep 17 00:00:00 2001 From: "serena.spinoso" Date: Thu, 7 Sep 2017 10:22:39 +0200 Subject: update verigraph JIRA: PARSER-154 code optimizations about graph manipulation and formula generation. Change-Id: Idebef19b128281aa2bc40d1aeab6e208c7ddd93d Signed-off-by: serena.spinoso --- .../polito/verigraph/grpc/test/GrpcServerTest.java | 392 +++++++++++++++++++++ 1 file changed, 392 insertions(+) create mode 100644 verigraph/src/it/polito/verigraph/grpc/test/GrpcServerTest.java (limited to 'verigraph/src/it/polito/verigraph/grpc/test/GrpcServerTest.java') diff --git a/verigraph/src/it/polito/verigraph/grpc/test/GrpcServerTest.java b/verigraph/src/it/polito/verigraph/grpc/test/GrpcServerTest.java new file mode 100644 index 0000000..e677bdd --- /dev/null +++ b/verigraph/src/it/polito/verigraph/grpc/test/GrpcServerTest.java @@ -0,0 +1,392 @@ +/******************************************************************************* + * Copyright (c) 2017 Politecnico di Torino and others. + * + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Apache License, Version 2.0 + * which accompanies this distribution, and is available at + * http://www.apache.org/licenses/LICENSE-2.0 + *******************************************************************************/ +package it.polito.verigraph.grpc.test; + +import static org.junit.Assert.assertEquals; +import io.grpc.ManagedChannel; +import io.grpc.inprocess.InProcessChannelBuilder; +import io.grpc.inprocess.InProcessServerBuilder; +import it.polito.verigraph.grpc.ConfigurationGrpc; +import it.polito.verigraph.grpc.GetRequest; +import it.polito.verigraph.grpc.GraphGrpc; +import it.polito.verigraph.grpc.NeighbourGrpc; +import it.polito.verigraph.grpc.NewGraph; +import it.polito.verigraph.grpc.NewNeighbour; +import it.polito.verigraph.grpc.NewNode; +import it.polito.verigraph.grpc.NodeGrpc; +import it.polito.verigraph.grpc.NodeGrpc.FunctionalType; +import it.polito.verigraph.grpc.client.Client; +import it.polito.verigraph.grpc.server.Service; +import it.polito.verigraph.grpc.RequestID; +import it.polito.verigraph.grpc.Status; +import it.polito.verigraph.grpc.VerigraphGrpc; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.FixMethodOrder; +import org.junit.runners.MethodSorters; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * Unit tests for {@link Service}. + * For testing basic gRPC unit test only. + * Not intended to provide a high code coverage or to test every major usecase. + */ +@RunWith(JUnit4.class) +@FixMethodOrder(MethodSorters.NAME_ASCENDING) +public class GrpcServerTest { + private Service server; + private ManagedChannel inProcessChannel; + + @Before + public void setUp() throws Exception { + String uniqueServerName = "in-process server for " + getClass(); + // use directExecutor for both InProcessServerBuilder and InProcessChannelBuilder can reduce the + // usage timeouts and latches in test. But we still add timeout and latches where they would be + // needed if no directExecutor were used, just for demo purpose. + server = new Service(InProcessServerBuilder.forName(uniqueServerName).directExecutor(),0); + server.start(); + inProcessChannel = InProcessChannelBuilder.forName(uniqueServerName).directExecutor().build(); + } + + @After + public void tearDown() throws Exception { + inProcessChannel.shutdownNow(); + server.stop(); + } + + public void deleteGraphs() { + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + Iterator iter = stub.getGraphs(GetRequest.newBuilder().build()); + while(iter.hasNext()){ + stub.deleteGraph(RequestID.newBuilder().setIdGraph(iter.next().getId()).build()); + } + } + + @Test + public void test1Graph() throws Exception { + System.out.println("[DEBUG] test1Graphs starts"); + deleteGraphs(); + RequestID request = RequestID.newBuilder().setIdGraph(1).build() ;//id not present + GraphGrpc ufoundedGraph = GraphGrpc.newBuilder() + //.setErrorMessage("Graph with id 1 not found").build(); + .setErrorMessage("There is no Graph whose Id is '1'").build(); + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + + // graph not found in the server + GraphGrpc graph = stub.getGraph(request); + assertEquals(ufoundedGraph, graph); + + // getGraph in the server, but first add it + GraphGrpc addedGraph = GraphGrpc.newBuilder().build(); + NewGraph response = stub.createGraph(addedGraph); + addedGraph = response.getGraph(); + //request = RequestID.newBuilder().setIdGraph(1).build() ; + request = RequestID.newBuilder().setIdGraph(response.getGraph().getId()).build() ; + graph = stub.getGraph(request); + + assertEquals(addedGraph.getId(), graph.getId()); + + //updateGraph + GraphGrpc updatedGraph = GraphGrpc.newBuilder().setId(response.getGraph().getId()).build(); + response = stub.updateGraph(updatedGraph); + + assertEquals(response.getSuccess(),true); + } + + @Test + public void test2Graphs() throws Exception { + System.out.println("[DEBUG] test2Graphs starts"); + deleteGraphs(); + // setup + GetRequest request = GetRequest.newBuilder().build(); + GraphGrpc g1 = GraphGrpc.newBuilder().build(); + GraphGrpc g2 = GraphGrpc.newBuilder().build(); + GraphGrpc g3 = GraphGrpc.newBuilder().build(); + GraphGrpc g4 = GraphGrpc.newBuilder().build(); + + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + + NewGraph g1_new = stub.createGraph(g1); + NewGraph g2_new = stub.createGraph(g2); + NewGraph g3_new = stub.createGraph(g3); + NewGraph g4_new = stub.createGraph(g4); + + long g1_id = g1_new.getGraph().getId(); + long g2_id = g2_new.getGraph().getId(); + long g3_id = g3_new.getGraph().getId(); + long g4_id = g4_new.getGraph().getId(); + g1 = GraphGrpc.newBuilder(g1).setId(g1_id).build(); + g2 = GraphGrpc.newBuilder(g2).setId(g2_id).build(); + g3 = GraphGrpc.newBuilder(g3).setId(g3_id).build(); + g4 = GraphGrpc.newBuilder(g4).setId(g4_id).build(); + // run + Iterator graphs = stub.getGraphs(request); + + while(graphs.hasNext()){ + graphs.next(); + } + + if(graphs.hasNext()){ + graphs.next(); + assertEquals(graphs.next(), g1); + assertEquals(graphs.next(), g2); + assertEquals(graphs.next(), g3); + assertEquals(graphs.next(), g4); + + //deleteGraph + RequestID req = RequestID.newBuilder().setIdGraph(g1.getId()).build(); + stub.deleteGraph(req); + // run + graphs = stub.getGraphs(request); + + assertEquals(graphs.next(), g2); + assertEquals(graphs.next(), g3); + assertEquals(graphs.next(), g4); + } + } + + @Test + public void test3Node() throws Exception { + System.out.println("[DEBUG] test3Graphs starts"); + deleteGraphs(); + + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + GraphGrpc g2 = GraphGrpc.newBuilder().build(); + NewGraph g2_new = stub.createGraph(g2); + long g2_id = g2_new.getGraph().getId(); + + RequestID request = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(1).build() ;//id not present + // graph not found in the server + NodeGrpc node = stub.getNode(request); + + NodeGrpc unfoundedGraph = NodeGrpc.newBuilder() + //.setErrorMessage("Node with id 1 not found in graph with id 2").build(); + //.setErrorMessage("There is no Graph whose Id is '2'").build(); + .setErrorMessage("There is no Node whose Id is '1'").build(); + + assertEquals(unfoundedGraph, node); + + // graph found in the server, but first add it + NodeGrpc addedNode = NodeGrpc.newBuilder().setName("client").setIdGraph(g2_id) + .setFunctionalType(FunctionalType.endhost).build(); + NewNode response = stub.createNode(addedNode); + long node_id = response.getNode().getId(); + //addedNode = response.getNode(); + + request = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(addedNode.getId()).build() ; + node = stub.getNode(request); + + assertEquals(addedNode.getId(), node.getId()); + assertEquals(addedNode.getName(),"client"); + + //updateNode + NodeGrpc updatedNode = NodeGrpc.newBuilder().setName("Nodo2").setIdGraph(g2_id).setId(node_id) + .setFunctionalType(FunctionalType.endhost).build(); + + response = stub.updateNode(updatedNode); + + assertEquals(response.getSuccess(),true); + assertEquals(response.getNode().getName(),"Nodo2"); + + //configureNode + Map params = new HashMap(); + params.put("url", "www.facebook.com"); + params.put("body", "word"); + params.put("destination","server"); + params.put("protocol", "HTTP_REQUEST"); + ConfigurationGrpc configuration = Client.createConfigurationGrpc(params, null, null, null); + ConfigurationGrpc config = ConfigurationGrpc.newBuilder(configuration).setIdGraph(g2_id) + .setIdNode(node_id).build(); + + Status status = stub.configureNode(config); + assertEquals(status.getSuccess(),true); + } + + @Test + public void test4Nodes() throws Exception { + System.out.println("[DEBUG] test4Graphs starts"); + deleteGraphs(); + + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + GraphGrpc g2 = GraphGrpc.newBuilder().build(); + NewGraph g2_new = stub.createGraph(g2); + long g2_id = g2_new.getGraph().getId(); + + // setup + RequestID request = RequestID.newBuilder().setIdGraph(g2_id).build(); + NodeGrpc n1 = NodeGrpc.newBuilder(Client.createNodeGrpc("Node5", "endhost", null, null)) + .setIdGraph(g2_id).build(); + NodeGrpc n2 = NodeGrpc.newBuilder(Client.createNodeGrpc("Node3", "endhost", null, null)) + .setIdGraph(g2_id).build(); + NodeGrpc n3 = NodeGrpc.newBuilder(Client.createNodeGrpc("Node4", "endhost", null, null)) + .setIdGraph(g2_id).build(); + NodeGrpc n4 = NodeGrpc.newBuilder(Client.createNodeGrpc("client", "endhost", null, null)) + .setIdGraph(g2_id).build(); + + NewNode nn1= stub.createNode(n1); + NewNode nn2= stub.createNode(n2); + NewNode nn3= stub.createNode(n3); + NewNode nn4= stub.createNode(n4); + + n1 = NodeGrpc.newBuilder(n1).setId(nn1.getNode().getId()).setIdGraph(g2_id).build(); + n2 = NodeGrpc.newBuilder(n2).setId(nn2.getNode().getId()).setIdGraph(g2_id).build(); + n3 = NodeGrpc.newBuilder(n3).setId(nn3.getNode().getId()).setIdGraph(g2_id).build(); + n4 = NodeGrpc.newBuilder(n4).setId(nn4.getNode().getId()).setIdGraph(g2_id).build(); + + // run + Iterator nodes = stub.getNodes(request); + + while(nodes.hasNext()){ + nodes.next(); + //System.out.println("[DEBUG - TEST4] graph loaded: " + nodes.next()); + } + + if(nodes.hasNext()){ + assertEquals(nodes.next(), n1); + assertEquals(nodes.next(), n2); + assertEquals(nodes.next(), n3); + assertEquals(nodes.next(), n4); + } + + //deleteNode + RequestID req = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(n1.getId()).build(); + stub.deleteNode(req); + // run + nodes = stub.getNodes(request); + + while(nodes.hasNext()){ + nodes.next(); + //System.out.println("[DEBUG - TEST4] graph loaded: " + nodes.next()); + } + + if(nodes.hasNext()){ + //assertEquals(nodes.next(), n1); + assertEquals(nodes.next(), n2); + assertEquals(nodes.next(), n3); + assertEquals(nodes.next(), n4); + } + } + + @Test + public void test5Neighbours() throws Exception { + System.out.println("[DEBUG] test5Graphs starts"); + deleteGraphs(); + + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + + GraphGrpc g2 = GraphGrpc.newBuilder().build(); + NewGraph g2_new = stub.createGraph(g2); + long g2_id = g2_new.getGraph().getId(); + + NodeGrpc n1 = NodeGrpc.newBuilder().setName("Node1").setIdGraph(g2_id).setFunctionalType(FunctionalType.endhost).build(); + NewNode new_n1 = stub.createNode(n1); + long n1_id = new_n1.getNode().getId(); + + NodeGrpc n2 = NodeGrpc.newBuilder().setName("client").setIdGraph(g2_id).setFunctionalType(FunctionalType.endhost).build(); + NewNode new_n2 = stub.createNode(n2); + long n2_id = new_n2.getNode().getId(); + + RequestID request = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(n1_id).setIdNeighbour(1).build() ;//id not present + NeighbourGrpc ufoundedNeighbour = NeighbourGrpc.newBuilder() + .setErrorMessage("Neighbour with id 1 not found for node with id "+n1_id+" in graph with id "+g2_id).build(); + + // Neighbour not found in the server + NeighbourGrpc neighbour = stub.getNeighbour(request); + + assertEquals(ufoundedNeighbour, neighbour); + + // getNeighbour, but first add it + NeighbourGrpc addedNeighbour = NeighbourGrpc.newBuilder().setIdGraph(g2_id).setIdNode(n1_id).setName("client").build(); + NewNeighbour response = stub.createNeighbour(addedNeighbour); + addedNeighbour = response.getNeighbour(); + request = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(n1_id) + .setIdNeighbour(addedNeighbour.getId()).build(); + neighbour = stub.getNeighbour(request); + + assertEquals(addedNeighbour.getId(), neighbour.getId()); + + NodeGrpc updatedNode = NodeGrpc.newBuilder().setName("Node4").setIdGraph(g2_id).setId(n2_id) + .setFunctionalType(FunctionalType.endhost).build(); + + //updateNeighbour + NewNode response_node = stub.updateNode(updatedNode); + assertEquals(response_node.getSuccess(),true); + + //NeighbourGrpc nu = NeighbourGrpc.newBuilder().setName("Node4") + //.setId(addedNeighbour.getId()).setIdGraph(g2_id).setIdNode(n1_id).build(); + //response = stub.updateNeighbour(nu); + //System.out.println(response); + + request = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(n1_id) + .setIdNeighbour(addedNeighbour.getId()).build(); + neighbour = stub.getNeighbour(request); + assertEquals(neighbour.getName(),"Node4"); + } + + @Test + public void test6Neighbours() throws Exception { + System.out.println("[DEBUG] test6Graphs starts"); + deleteGraphs(); + + VerigraphGrpc.VerigraphBlockingStub stub = VerigraphGrpc.newBlockingStub(inProcessChannel); + // setup + GraphGrpc g2 = GraphGrpc.newBuilder().build(); + NewGraph g2_new = stub.createGraph(g2); + long g2_id = g2_new.getGraph().getId(); + + NodeGrpc node1 = NodeGrpc.newBuilder().setName("Node1").setFunctionalType(FunctionalType.endhost).build(); + NewNode new_n1 = stub.createNode(node1); + long n1_id = new_n1.getNode().getId(); + + + + NeighbourGrpc n1 = NeighbourGrpc.newBuilder().setIdGraph(g2_id).setIdNode(n1_id) + .setName("Node3").build(); + NeighbourGrpc n2 = NeighbourGrpc.newBuilder().setIdGraph(g2_id).setIdNode(n1_id) + .setName("client").build(); + + + stub.createNeighbour(n1); + stub.createNeighbour(n2); + n1 = NeighbourGrpc.newBuilder(n1).setId(2).setIdGraph(g2_id).setIdNode(n1_id).build(); + n2 = NeighbourGrpc.newBuilder(n2).setId(3).setIdGraph(g2_id).setIdNode(n1_id).build(); + // run + RequestID request = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(n1_id).build(); + Iterator neighbours = stub.getNeighbours(request); + + while(neighbours.hasNext()){ + neighbours.next(); + } + + if(neighbours.hasNext()){ + assertEquals(neighbours.next(), n1); + assertEquals(neighbours.next(), n2); + } + + //deleteNeighbour + RequestID req = RequestID.newBuilder().setIdGraph(g2_id).setIdNode(n1_id).setIdNeighbour(n1.getId()).build(); + stub.deleteNeighbour(req); + // run + neighbours = stub.getNeighbours(request); + + while(neighbours.hasNext()){ + neighbours.next(); + } + + if(neighbours.hasNext()){ + assertEquals(neighbours.next(), n1); + assertEquals(neighbours.next(), n2); + } + } +} -- cgit 1.2.3-korg