/* * 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.tinkergraph.structure; import org.apache.commons.configuration.BaseConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Edge; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.VertexProperty; import org.junit.BeforeClass; import org.junit.Test; import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import java.util.Arrays; import java.util.UUID; import static org.junit.Assert.assertEquals; /** * @author Stephen Mallette (http://stephen.genoprime.com) */ @RunWith(Enclosed.class) public class TinkerGraphIdManagerTest { @RunWith(Parameterized.class) public static class NumberIdManagerTest { private static final Configuration longIdManagerConfig = new BaseConfiguration(); private static final Configuration integerIdManagerConfig = new BaseConfiguration(); @Parameterized.Parameters(name = "{0}") public static Iterable<Object[]> data() { return Arrays.asList(new Object[][]{ {"coerceLong", 100l, 200l, 300l}, {"coerceInt", 100, 200, 300}, {"coerceDouble", 100d, 200d, 300d}, {"coerceFloat", 100f, 200f, 300f}, {"coerceString", "100", "200", "300"}}); } @Parameterized.Parameter(value = 0) public String name; @Parameterized.Parameter(value = 1) public Object vertexIdValue; @Parameterized.Parameter(value = 2) public Object edgeIdValue; @Parameterized.Parameter(value = 3) public Object vertexPropertyIdValue; @BeforeClass public static void setup() { longIdManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, TinkerGraph.DefaultIdManager.LONG.name()); longIdManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_ID_MANAGER, TinkerGraph.DefaultIdManager.LONG.name()); longIdManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_PROPERTY_ID_MANAGER, TinkerGraph.DefaultIdManager.LONG.name()); integerIdManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, TinkerGraph.DefaultIdManager.INTEGER.name()); integerIdManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_ID_MANAGER, TinkerGraph.DefaultIdManager.INTEGER.name()); integerIdManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_PROPERTY_ID_MANAGER, TinkerGraph.DefaultIdManager.INTEGER.name()); } @Test public void shouldUseLongIdManagerToCoerceTypes() { final Graph graph = TinkerGraph.open(longIdManagerConfig); final Vertex v = graph.addVertex(T.id, vertexIdValue); final VertexProperty vp = v.property(VertexProperty.Cardinality.single, "test", "value", T.id, vertexPropertyIdValue); final Edge e = v.addEdge("self", v, T.id, edgeIdValue); assertEquals(100l, v.id()); assertEquals(200l, e.id()); assertEquals(300l, vp.id()); } @Test public void shouldUseIntegerIdManagerToCoerceTypes() { final Graph graph = TinkerGraph.open(integerIdManagerConfig); final Vertex v = graph.addVertex(T.id, vertexIdValue); final VertexProperty vp = v.property(VertexProperty.Cardinality.single, "test", "value", T.id, vertexPropertyIdValue); final Edge e = v.addEdge("self", v, T.id, edgeIdValue); assertEquals(100, v.id()); assertEquals(200, e.id()); assertEquals(300, vp.id()); } } @RunWith(Parameterized.class) public static class UuidIdManagerTest { private static final Configuration idManagerConfig = new BaseConfiguration(); private static final UUID vertexId = UUID.fromString("0E939658-ADD2-4598-A722-2FC178E9B741"); private static final UUID edgeId = UUID.fromString("748179AA-E319-8C36-41AE-F3576B73E05C"); private static final UUID vertexPropertyId = UUID.fromString("EC27384C-39A0-923D-9410-271B585683B6"); @Parameterized.Parameters(name = "{0}") public static Iterable<Object[]> data() { return Arrays.asList(new Object[][]{ {"coerceUuid", vertexId, edgeId, vertexPropertyId}, {"coerceString", vertexId.toString(), edgeId.toString(), vertexPropertyId.toString()}}); } @Parameterized.Parameter(value = 0) public String name; @Parameterized.Parameter(value = 1) public Object vertexIdValue; @Parameterized.Parameter(value = 2) public Object edgeIdValue; @Parameterized.Parameter(value = 3) public Object vertexPropertyIdValue; @BeforeClass public static void setup() { idManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_EDGE_ID_MANAGER, TinkerGraph.DefaultIdManager.UUID.name()); idManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_ID_MANAGER, TinkerGraph.DefaultIdManager.UUID.name()); idManagerConfig.addProperty(TinkerGraph.GREMLIN_TINKERGRAPH_VERTEX_PROPERTY_ID_MANAGER, TinkerGraph.DefaultIdManager.UUID.name()); } @Test public void shouldUseIdManagerToCoerceTypes() { final Graph graph = TinkerGraph.open(idManagerConfig); final Vertex v = graph.addVertex(T.id, vertexIdValue); final VertexProperty vp = v.property(VertexProperty.Cardinality.single, "test", "value", T.id, vertexPropertyIdValue); final Edge e = v.addEdge("self", v, T.id, edgeIdValue); assertEquals(vertexId, v.id()); assertEquals(edgeId, e.id()); assertEquals(vertexPropertyId, vp.id()); } } }