Coverage Summary for Class: TestTopologyPropertyColumnRenameDistributed (org.umlg.sqlg.test.topology)
Class |
Method, %
|
Branch, %
|
Line, %
|
TestTopologyPropertyColumnRenameDistributed |
100%
(4/4)
|
30%
(3/10)
|
95.9%
(71/74)
|
TestTopologyPropertyColumnRenameDistributed$1 |
100%
(1/1)
|
100%
(2/2)
|
TestTopologyPropertyColumnRenameDistributed$2 |
100%
(1/1)
|
100%
(3/3)
|
Total |
100%
(6/6)
|
30%
(3/10)
|
96.2%
(76/79)
|
package org.umlg.sqlg.test.topology;
import com.google.common.base.Preconditions;
import org.apache.commons.collections4.set.ListOrderedSet;
import org.apache.commons.configuration2.builder.fluent.Configurations;
import org.apache.commons.configuration2.ex.ConfigurationException;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.Assert;
import org.junit.Assume;
import org.junit.BeforeClass;
import org.junit.Test;
import org.umlg.sqlg.structure.PropertyDefinition;
import org.umlg.sqlg.structure.PropertyType;
import org.umlg.sqlg.structure.SqlgGraph;
import org.umlg.sqlg.structure.topology.PropertyColumn;
import org.umlg.sqlg.structure.topology.Topology;
import org.umlg.sqlg.structure.topology.VertexLabel;
import org.umlg.sqlg.test.BaseTest;
import java.net.URL;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Optional;
public class TestTopologyPropertyColumnRenameDistributed extends BaseTest {
@BeforeClass
public static void beforeClass() {
URL sqlProperties = Thread.currentThread().getContextClassLoader().getResource("sqlg.properties");
try {
Configurations configs = new Configurations();
configuration = configs.properties(sqlProperties);
Assume.assumeTrue(isPostgres());
configuration.addProperty("distributed", true);
if (!configuration.containsKey("jdbc.url"))
throw new IllegalArgumentException(String.format("SqlGraph configuration requires that the %s be set", "jdbc.url"));
} catch (ConfigurationException e) {
throw new RuntimeException(e);
}
}
@Test
public void testDistributedNameChange() throws InterruptedException {
try (SqlgGraph sqlgGraph1 = SqlgGraph.open(configuration)) {
sqlgGraph1.getTopology().getPublicSchema()
.ensureVertexLabelExist("A", new LinkedHashMap<>() {{
put("column1", PropertyDefinition.of(PropertyType.STRING));
}});
sqlgGraph1.tx().commit();
Optional<VertexLabel> aVertexLabelOptional = sqlgGraph1.getTopology().getPublicSchema().getVertexLabel("A");
Preconditions.checkState(aVertexLabelOptional.isPresent());
VertexLabel aVertexLabel = aVertexLabelOptional.get();
Optional<PropertyColumn> column1Optional = aVertexLabel.getProperty("column1");
Preconditions.checkState(column1Optional.isPresent());
PropertyColumn column1 = column1Optional.get();
column1.rename("column2");
sqlgGraph1.tx().commit();
Thread.sleep(1_000);
Assert.assertEquals(this.sqlgGraph.getTopology(), sqlgGraph1.getTopology());
List<String> propertyNames = this.sqlgGraph.topology().V().hasLabel(Topology.SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_PROPERTY).<String>values(Topology.SQLG_SCHEMA_PROPERTY_NAME).toList();
Assert.assertEquals(1, propertyNames.size());
Assert.assertEquals("column2", propertyNames.get(0));
Assert.assertTrue(this.sqlgGraph.getTopology().getPublicSchema().getVertexLabel("A").orElseThrow().getProperty("column2").isPresent());
}
}
@Test
public void testDistributedIdentifierChange() throws InterruptedException {
try (SqlgGraph sqlgGraph1 = SqlgGraph.open(configuration)) {
sqlgGraph1.getTopology().getPublicSchema()
.ensureVertexLabelExist("A", new LinkedHashMap<>() {{
put("column1", PropertyDefinition.of(PropertyType.STRING));
put("column2", PropertyDefinition.of(PropertyType.STRING));
}}, ListOrderedSet.listOrderedSet(List.of("column1")));
sqlgGraph1.tx().commit();
Optional<VertexLabel> aVertexLabelOptional = sqlgGraph1.getTopology().getPublicSchema().getVertexLabel("A");
Preconditions.checkState(aVertexLabelOptional.isPresent());
VertexLabel aVertexLabel = aVertexLabelOptional.get();
Optional<PropertyColumn> column1Optional = aVertexLabel.getProperty("column1");
Preconditions.checkState(column1Optional.isPresent());
ListOrderedSet<String> identifiers = aVertexLabel.getIdentifiers();
Assert.assertEquals(1, identifiers.size());
Assert.assertEquals("column1", identifiers.get(0));
PropertyColumn column1 = column1Optional.get();
column1.rename("column1PK");
sqlgGraph1.tx().commit();
List<Vertex> identifierProperties = sqlgGraph1.topology().V().hasLabel(Topology.SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_VERTEX_LABEL)
.out(Topology.SQLG_SCHEMA_VERTEX_IDENTIFIER_EDGE)
.toList();
Assert.assertEquals(1, identifierProperties.size());
Assert.assertEquals("column1PK", identifierProperties.get(0).value(Topology.SQLG_SCHEMA_PROPERTY_NAME));
aVertexLabelOptional = sqlgGraph1.getTopology().getPublicSchema().getVertexLabel("A");
Preconditions.checkState(aVertexLabelOptional.isPresent());
aVertexLabel = aVertexLabelOptional.get();
column1Optional = aVertexLabel.getProperty("column1PK");
Preconditions.checkState(column1Optional.isPresent());
identifiers = aVertexLabel.getIdentifiers();
Assert.assertEquals(1, identifiers.size());
Assert.assertEquals("column1PK", identifiers.get(0));
Thread.sleep(1_000);
Assert.assertEquals(this.sqlgGraph.getTopology(), sqlgGraph1.getTopology());
identifierProperties = this.sqlgGraph.topology().V().hasLabel(Topology.SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_VERTEX_LABEL)
.out(Topology.SQLG_SCHEMA_VERTEX_IDENTIFIER_EDGE)
.toList();
Assert.assertEquals(1, identifierProperties.size());
Assert.assertEquals("column1PK", identifierProperties.get(0).value(Topology.SQLG_SCHEMA_PROPERTY_NAME));
aVertexLabelOptional = this.sqlgGraph.getTopology().getPublicSchema().getVertexLabel("A");
Preconditions.checkState(aVertexLabelOptional.isPresent());
aVertexLabel = aVertexLabelOptional.get();
column1Optional = aVertexLabel.getProperty("column1PK");
Preconditions.checkState(column1Optional.isPresent());
identifiers = aVertexLabel.getIdentifiers();
Assert.assertEquals(1, identifiers.size());
Assert.assertEquals("column1PK", identifiers.get(0));
}
}
}