blob: 9acaa3f77c5efe8b0de10a79e21bac307735e6b9 [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.process.traversal.strategy.decoration;
import org.apache.tinkerpop.gremlin.FeatureRequirementSet;
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Direction;
import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.T;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.UUID;
import java.util.concurrent.atomic.AtomicBoolean;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
/**
* @author Stephen Mallette (http://stephen.genoprime.com)
*/
public class ElementIdStrategyProcessTest extends AbstractGremlinProcessTest {
private static final Logger logger = LoggerFactory.getLogger(ElementIdStrategyProcessTest.class);
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldGenerateDefaultIdOnGraphAddVWithGeneratedDefaultId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
final Traversal t1 = graph.traversal().V(v);
t1.asAdmin().applyStrategies();
logger.info(t1.toString());
final Traversal t2 = sg.V(v);
t2.asAdmin().applyStrategies();
logger.info(t2.toString());
assertNotNull(UUID.fromString(sg.V(v).id().next().toString()));
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldGenerateDefaultIdOnGraphAddVWithGeneratedCustomId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().idMaker(new ConstantSupplier<>("xxx")).create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
assertEquals("xxx", sg.V(v).id().next());
assertEquals("xxx", sg.V("xxx").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldSetIdOnAddVWithIdPropertyKeySpecifiedAndNameSuppliedAsProperty() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
assertEquals("stephen", sg.V(v).id().next());
assertEquals("stephen", sg.V("stephen").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldSetIdOnAddVWithIdPropertyKeySpecifiedAndIdSuppliedAsProperty() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().property(T.id, "stephen").next();
assertEquals("stephen", v.value("name"));
assertEquals("stephen", sg.V(v).id().next());
assertEquals("stephen", sg.V("stephen").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldGenerateDefaultIdOnGraphAddVWithSpecifiedId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().property(T.id, "STEPHEN").property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
assertEquals("STEPHEN", sg.V(v).id().next());
assertEquals("STEPHEN", sg.V("STEPHEN").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldGenerateDefaultIdOnAddVWithGeneratedDefaultId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().create();
final GraphTraversalSource sg = create(strategy);
sg.addV().next();
assertEquals(1, IteratorUtils.count(sg.V()));
final Vertex v = sg.V().addV().property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
assertNotNull(UUID.fromString(sg.V(v).id().next().toString()));
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldGenerateDefaultIdOnAddVWithGeneratedCustomId() throws Exception {
final AtomicBoolean first = new AtomicBoolean(false);
final ElementIdStrategy strategy = ElementIdStrategy.build().idMaker(() -> {
final String key = first.get() ? "xxx" : "yyy";
first.set(true);
return key;
}).create();
final GraphTraversalSource sg = create(strategy);
sg.addV().next();
assertEquals(1, IteratorUtils.count(sg.V()));
final Vertex v = sg.V().addV().property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
assertEquals("xxx", sg.V(v).id().next());
assertEquals("xxx", sg.V("xxx").id().next());
assertEquals("yyy", sg.V("yyy").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
public void shouldGenerateDefaultIdOnAddVWithSpecifiedId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().create();
final GraphTraversalSource sg = create(strategy);
sg.addV().next();
assertEquals(1, IteratorUtils.count(sg.V()));
final Vertex v = sg.V().addV().property(T.id, "STEPHEN").property("name", "stephen").next();
assertEquals("stephen", v.value("name"));
assertEquals("STEPHEN", sg.V(v).id().next());
assertEquals("STEPHEN", sg.V("STEPHEN").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
public void shouldGenerateDefaultIdOnAddEWithSpecifiedId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().next();
final Edge e = sg.withSideEffect("v", v).V(v).addE("self").to("v").property("test", "value").property(T.id, "some-id").next();
assertEquals("value", e.value("test"));
assertEquals("some-id", sg.E(e).id().next());
assertEquals("some-id", sg.E("some-id").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
public void shouldGenerateDefaultIdOnAddEWithGeneratedId() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().next();
final Edge e = sg.withSideEffect("v", v).V(v).addE("self").to("v").property("test", "value").next();
assertEquals("value", e.value("test"));
assertNotNull(UUID.fromString(sg.E(e).id().next().toString()));
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
public void shouldSetIdOnAddEWithIdPropertyKeySpecifiedAndNameSuppliedAsProperty() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().next();
final Edge e = sg.withSideEffect("v", v).V(v).addE("self").to("v").property("test", "value").property(T.id, "some-id").next();
assertEquals("value", e.value("test"));
assertEquals("some-id", e.value("name"));
assertEquals("some-id", sg.E(e).id().next());
assertEquals("some-id", sg.E("some-id").id().next());
}
@Test
@FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
public void shouldSetIdOnAddEWithNamePropertyKeySpecifiedAndNameSuppliedAsProperty() throws Exception {
final ElementIdStrategy strategy = ElementIdStrategy.build().idPropertyKey("name").create();
final GraphTraversalSource sg = create(strategy);
final Vertex v = sg.addV().next();
final Edge e = sg.withSideEffect("v", v).V(v).addE("self").to("v").property("test", "value").property("name", "some-id").next();
assertEquals("value", e.value("test"));
assertEquals("some-id", e.value("name"));
assertEquals("some-id", sg.E(e).id().next());
assertEquals("some-id", sg.E("some-id").id().next());
}
private GraphTraversalSource create(final ElementIdStrategy strategy) {
return graphProvider.traversal(graph, strategy);
}
}