use of ai.grakn.GraknTx in project grakn by graknlabs.
the class GraknTxTest method attemptingToUseClosedGraphFailingThenOpeningGraph_EnsureGraphIsUsable.
@Test
public void attemptingToUseClosedGraphFailingThenOpeningGraph_EnsureGraphIsUsable() throws InvalidKBException {
GraknTx graph = Grakn.session(Grakn.IN_MEMORY, "testingagain").open(GraknTxType.WRITE);
graph.close();
boolean errorThrown = false;
try {
graph.putEntityType("A Thing");
} catch (GraknTxOperationException e) {
if (e.getMessage().equals(ErrorMessage.TX_CLOSED_ON_ACTION.getMessage("closed", graph.keyspace()))) {
errorThrown = true;
}
}
assertTrue("Graph not correctly closed", errorThrown);
graph = Grakn.session(Grakn.IN_MEMORY, "testingagain").open(GraknTxType.WRITE);
graph.putEntityType("A Thing");
}
use of ai.grakn.GraknTx in project grakn by graknlabs.
the class GraknTxTest method checkThatMainCentralCacheIsNotAffectedByTransactionModifications.
@Test
public void checkThatMainCentralCacheIsNotAffectedByTransactionModifications() throws InvalidKBException, ExecutionException, InterruptedException {
// Check Central cache is empty
assertCacheOnlyContainsMetaTypes();
Role r1 = tx.putRole("r1");
Role r2 = tx.putRole("r2");
EntityType e1 = tx.putEntityType("e1").plays(r1).plays(r2);
RelationshipType rel1 = tx.putRelationshipType("rel1").relates(r1).relates(r2);
// Purge the above concepts into the main cache
tx.commit();
tx = EmbeddedGraknSession.create(tx.keyspace(), Grakn.IN_MEMORY).open(GraknTxType.WRITE);
// Check cache is in good order
Collection<SchemaConcept> cachedValues = tx.getGlobalCache().getCachedTypes().values();
assertTrue("Type [" + r1 + "] was not cached", cachedValues.contains(r1));
assertTrue("Type [" + r2 + "] was not cached", cachedValues.contains(r2));
assertTrue("Type [" + e1 + "] was not cached", cachedValues.contains(e1));
assertTrue("Type [" + rel1 + "] was not cached", cachedValues.contains(rel1));
assertThat(e1.plays().collect(toSet()), containsInAnyOrder(r1, r2));
ExecutorService pool = Executors.newSingleThreadExecutor();
// Mutate Schema in a separate thread
pool.submit(() -> {
GraknTx innerGraph = Grakn.session(Grakn.IN_MEMORY, tx.keyspace()).open(GraknTxType.WRITE);
EntityType entityType = innerGraph.getEntityType("e1");
Role role = innerGraph.getRole("r1");
entityType.deletePlays(role);
}).get();
// Check the above mutation did not affect central repo
SchemaConcept foundE1 = tx.getGlobalCache().getCachedTypes().get(e1.getLabel());
assertTrue("Main cache was affected by transaction", foundE1.asType().plays().anyMatch(role -> role.equals(r1)));
}
use of ai.grakn.GraknTx in project grakn by graknlabs.
the class GraknTxTest method whenCreatingAValidSchemaInSeparateThreads_EnsureValidationRulesHold.
@Test
public void whenCreatingAValidSchemaInSeparateThreads_EnsureValidationRulesHold() throws ExecutionException, InterruptedException {
GraknSession session = Grakn.session(Grakn.IN_MEMORY, "hi");
ExecutorService executor = Executors.newCachedThreadPool();
executor.submit(() -> {
// Resources
try (GraknTx graph = session.open(GraknTxType.WRITE)) {
AttributeType<Long> int_ = graph.putAttributeType("int", AttributeType.DataType.LONG);
AttributeType<Long> foo = graph.putAttributeType("foo", AttributeType.DataType.LONG).sup(int_);
graph.putAttributeType("bar", AttributeType.DataType.LONG).sup(int_);
graph.putEntityType("FOO").attribute(foo);
graph.commit();
}
}).get();
// Relationship Which Has Resources
try (GraknTx graph = session.open(GraknTxType.WRITE)) {
graph.putEntityType("BAR").attribute(graph.getAttributeType("bar"));
graph.commit();
}
}
use of ai.grakn.GraknTx in project grakn by graknlabs.
the class GraknTxTest method whenPassingGraphToAnotherThreadWithoutOpening_Throw.
@Test
public void whenPassingGraphToAnotherThreadWithoutOpening_Throw() throws ExecutionException, InterruptedException {
ExecutorService pool = Executors.newSingleThreadExecutor();
GraknTx graph = Grakn.session(Grakn.IN_MEMORY, "testing").open(GraknTxType.WRITE);
expectedException.expectCause(IsInstanceOf.instanceOf(GraknTxOperationException.class));
expectedException.expectMessage(GraknTxOperationException.transactionClosed(graph, null).getMessage());
Future future = pool.submit(() -> {
graph.putEntityType("A Thing");
});
future.get();
}
use of ai.grakn.GraknTx in project grakn by graknlabs.
the class GrpcServerIT method whenGettingASchemaConcept_TheInformationOnTheSchemaConceptIsCorrect.
@Test
public void whenGettingASchemaConcept_TheInformationOnTheSchemaConceptIsCorrect() {
try (GraknTx remoteTx = remoteSession.open(GraknTxType.READ);
GraknTx localTx = localSession.open(GraknTxType.READ)) {
GetQuery query = remoteTx.graql().match(var("x").label("actor")).get();
SchemaConcept remoteConcept = query.stream().findAny().get().get("x").asSchemaConcept();
SchemaConcept localConcept = localTx.getConcept(remoteConcept.getId()).asSchemaConcept();
assertEquals(localConcept.isImplicit(), remoteConcept.isImplicit());
assertEquals(localConcept.getLabel(), remoteConcept.getLabel());
assertEquals(localConcept.sup().getId(), remoteConcept.sup().getId());
assertEqualConcepts(localConcept, remoteConcept, SchemaConcept::sups);
assertEqualConcepts(localConcept, remoteConcept, SchemaConcept::subs);
}
}
Aggregations