@Category({ BrittleTests.class })
@Test
public void testEdgeTTLWithVertexCentricIndex() throws Exception {
if (!features.hasCellTTL()) {
return;
}
int ttl = 1;
final PropertyKey time = mgmt.makePropertyKey("time").dataType(Integer.class).make();
EdgeLabel wavedAt = mgmt.makeEdgeLabel("wavedAt").signature(time).make();
mgmt.buildEdgeIndex(wavedAt, "timeindex", Direction.BOTH, Order.DESC, time);
mgmt.setTTL(wavedAt, ttl, TimeUnit.SECONDS);
assertEquals(0, mgmt.getTTL(time).getLength(TimeUnit.SECONDS));
assertEquals(ttl, mgmt.getTTL(wavedAt).getLength(TimeUnit.SECONDS));
mgmt.commit();
Vertex v1 = graph.addVertex(null), v2 = graph.addVertex(null);
Edge e1 = graph.addEdge(null, v1, v2, "wavedAt");
e1.setProperty("time", 42);
assertTrue(v1.getEdges(Direction.OUT).iterator().hasNext());
assertTrue(v1.query().direction(Direction.OUT).interval("time", 0, 100).edges().iterator().hasNext());
graph.commit();
long commitTime = System.currentTimeMillis();
assertTrue(v1.getEdges(Direction.OUT).iterator().hasNext());
assertTrue(v1.query().direction(Direction.OUT).interval("time", 0, 100).edges().iterator().hasNext());
Thread.sleep(commitTime + (ttl * 1000L + 100) - System.currentTimeMillis());
graph.rollback();
assertFalse(v1.getEdges(Direction.OUT).iterator().hasNext());
assertFalse(v1.query().direction(Direction.OUT).interval("time", 0, 100).edges().iterator().hasNext());
}