blob: f888d5a1b57a993c9643bed4a4bfaa98d0ac1035 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.tinkerpop.gremlin.server;
import org.apache.tinkerpop.gremlin.driver.Client;
import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection;
import org.apache.tinkerpop.gremlin.process.traversal.AnonymousTraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Property;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.structure.VertexProperty;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.apache.tinkerpop.gremlin.util.ser.AbstractMessageSerializer;
import org.apache.tinkerpop.gremlin.util.ser.GraphBinaryMessageSerializerV1;
import org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV2d0;
import org.apache.tinkerpop.gremlin.util.ser.GraphSONMessageSerializerV3d0;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import static org.junit.Assert.assertEquals;
@RunWith(Parameterized.class)
public class GremlinServerSerializationIntegrateTest extends AbstractGremlinServerIntegrationTest {
private AbstractMessageSerializer serializer;
private Cluster cluster = null;
private Client client = null;
private GraphTraversalSource g = null;
public GremlinServerSerializationIntegrateTest(AbstractMessageSerializer serializer) {
this.serializer = serializer;
}
@Parameterized.Parameters
public static Collection serializers() {
return Arrays.asList(new Object[][]{
{new GraphBinaryMessageSerializerV1()},
{new GraphSONMessageSerializerV3d0()},
{new GraphSONMessageSerializerV2d0()}
});
}
@Before
public void openConnection() {
cluster = TestClientFactory.build().serializer(serializer).create();
client = cluster.connect();
// VertexProperty related test tun on crew graph
final String remoteTraversalSourceName = name.getMethodName().contains("VertexProperty") ? "gcrew" : "gmodern";
g = AnonymousTraversalSource.traversal().withRemote(
DriverRemoteConnection.using(cluster, remoteTraversalSourceName));
}
@After
public void closeConnection() {
if (cluster != null) cluster.close();
}
@Test
public void shouldDeserializeVertexPropertiesForScripts() {
final Vertex vertex = client.submit("gmodern.V(1)").one().getVertex();
assertVertexWithProperties(vertex);
}
@Test
public void shouldSkipVertexPropertiesForScripts() {
final Vertex vertex = client.submit("gmodern.with('materializeProperties', 'tokens').V(1)").one().getVertex();
assertVertexWithoutProperties(vertex);
}
@Test
public void shouldDeserializeVertexPropertiesForBytecode() {
final Vertex vertex = g.V(1).next();
assertVertexWithProperties(vertex);
}
@Test
public void shouldSkipVertexPropertiesForBytecode() {
final Vertex vertex = g.with("materializeProperties", "tokens").V(1).next();
assertVertexWithoutProperties(vertex);
}
@Test
public void shouldDeserializeEdgePropertiesForScripts() {
final Edge edge = client.submit("gmodern.E(7)").one().getEdge();
assertEdgeWithProperties(edge);
}
@Test
public void shouldSkipEdgePropertiesForScripts() {
final Edge edge = client.submit("gmodern.with('materializeProperties', 'tokens').E(7)").one().getEdge();
assertEdgeWithoutProperties(edge);
}
@Test
public void shouldDeserializeEdgePropertiesForBytecode() {
final Edge edge = g.E(7).next();
assertEdgeWithProperties(edge);
}
@Test
public void shouldSkipEdgePropertiesForBytecode() {
final Edge edge = g.with("materializeProperties", "tokens").E(7).next();
assertEdgeWithoutProperties(edge);
}
@Test
public void shouldDeserializeVertexPropertyPropertiesForScripts() {
final Vertex vertex = client.submit("gcrew.V(7)").one().getVertex();
assertVertexWithVertexProperties(vertex);
}
@Test
public void shouldSkipVertexPropertyPropertiesForScripts() {
final Vertex vertex = client.submit("gcrew.with('materializeProperties', 'tokens').V(7)").one().getVertex();
assertVertexWithoutVertexProperties(vertex);
}
@Test
public void shouldDeserializeVertexPropertyPropertiesForBytecode() {
final Vertex vertex = g.V(7).next();
assertVertexWithVertexProperties(vertex);
}
@Test
public void shouldSkipVertexPropertyPropertiesForBytecode() {
final Vertex vertex = g.with("materializeProperties", "tokens").V(7).next();
assertVertexWithoutVertexProperties(vertex);
}
// asserted vertex 7 from crew graph
private void assertVertexWithVertexProperties(final Vertex vertex) {
assertEquals(7, vertex.id());
assertEquals("person", vertex.label());
assertEquals(4, IteratorUtils.count(vertex.properties()));
assertEquals(3, IteratorUtils.count(vertex.properties("location")));
final VertexProperty vertexProperty = vertex.properties("location").next();
assertEquals("centreville", vertexProperty.value());
assertEquals(2, IteratorUtils.count(vertexProperty.properties()));
final Property vertexPropertyPropertyStartTime = vertexProperty.property("startTime");
assertEquals(1990, vertexPropertyPropertyStartTime.value());
final Property vertexPropertyPropertyEndTime = vertexProperty.property("endTime");
assertEquals(2000, vertexPropertyPropertyEndTime.value());
}
// asserted vertex 7 from crew graph
private void assertVertexWithoutVertexProperties(final Vertex vertex) {
assertEquals(7, vertex.id());
assertEquals("person", vertex.label());
assertEquals(0, IteratorUtils.count(vertex.properties()));
}
// asserted vertex 1 from modern graph
private void assertVertexWithoutProperties(final Vertex vertex) {
assertEquals(1, vertex.id());
assertEquals("person", vertex.label());
assertEquals(Collections.emptyIterator(), vertex.properties());
}
// asserted vertex 1 from modern graph
private void assertVertexWithProperties(final Vertex vertex) {
assertEquals(1, vertex.id());
assertEquals("person", vertex.label());
assertEquals(2, IteratorUtils.count(vertex.properties()));
assertEquals("marko", vertex.property("name").value());
assertEquals(29, vertex.property("age").value());
}
// asserted edge 7 from modern graph
private void assertEdgeWithoutProperties(final Edge edge) {
assertEquals(7, edge.id());
assertEquals("knows", edge.label());
assertEquals(Collections.emptyIterator(), edge.properties());
}
// asserted edge 7 from modern graph
private void assertEdgeWithProperties(final Edge edge) {
assertEquals(7, edge.id());
assertEquals("knows", edge.label());
assertEquals(1, IteratorUtils.count(edge.properties()));
assertEquals(0.5, edge.property("weight").value());
}
}