Search in sources :

Example 31 with Node

use of org.neo4j.graphdb.Node in project neo4j by neo4j.

the class UniqueFactoryTest method shouldNotTouchTransactionsIfAlreadyInIndex.

@Test
public void shouldNotTouchTransactionsIfAlreadyInIndex() {
    GraphDatabaseService graphdb = mock(GraphDatabaseService.class);
    @SuppressWarnings("unchecked") Index<Node> index = mock(Index.class);
    when(index.getGraphDatabase()).thenReturn(graphdb);
    @SuppressWarnings("unchecked") IndexHits<Node> getHits = mock(IndexHits.class);
    when(index.get("key1", "value1")).thenReturn(getHits);
    Node indexedNode = mock(Node.class);
    when(getHits.getSingle()).thenReturn(indexedNode);
    UniqueFactory.UniqueNodeFactory unique = new UniqueFactory.UniqueNodeFactory(index) {

        @Override
        protected void initialize(Node created, Map<String, Object> properties) {
            fail("we did not create the node, so it should not be initialized");
        }
    };
    // when
    Node node = unique.getOrCreate("key1", "value1");
    // then
    assertSame(node, indexedNode);
    verify(index).get("key1", "value1");
}
Also used : GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) Node(org.neo4j.graphdb.Node) Map(java.util.Map) Test(org.junit.Test)

Example 32 with Node

use of org.neo4j.graphdb.Node in project neo4j by neo4j.

the class SchemaImplTest method testGetIndexPopulationProgress.

@Test
public void testGetIndexPopulationProgress() throws Exception {
    assertFalse(indexExists(Label.label("User")));
    // Create some nodes
    try (Transaction tx = db.beginTx()) {
        Label label = Label.label("User");
        // Create a huge bunch of users so the index takes a while to build
        for (int id = 0; id < 100000; id++) {
            Node userNode = db.createNode(label);
            userNode.setProperty("username", "user" + id + "@neo4j.org");
        }
        tx.success();
    }
    // Create an index
    IndexDefinition indexDefinition;
    try (Transaction tx = db.beginTx()) {
        Schema schema = db.schema();
        indexDefinition = schema.indexFor(Label.label("User")).on("username").create();
        tx.success();
    }
    // Get state and progress
    try (Transaction tx = db.beginTx()) {
        Schema schema = db.schema();
        Schema.IndexState state;
        IndexPopulationProgress progress;
        do {
            state = schema.getIndexState(indexDefinition);
            progress = schema.getIndexPopulationProgress(indexDefinition);
            assertTrue(progress.getCompletedPercentage() >= 0);
            assertTrue(progress.getCompletedPercentage() <= 100);
            Thread.sleep(10);
        } while (state == Schema.IndexState.POPULATING);
        assertTrue(state == Schema.IndexState.ONLINE);
        assertEquals(100.0f, progress.getCompletedPercentage(), 0.0f);
    }
}
Also used : Transaction(org.neo4j.graphdb.Transaction) IndexDefinition(org.neo4j.graphdb.schema.IndexDefinition) IndexPopulationProgress(org.neo4j.graphdb.index.IndexPopulationProgress) Node(org.neo4j.graphdb.Node) Schema(org.neo4j.graphdb.schema.Schema) Label(org.neo4j.graphdb.Label) Test(org.junit.Test)

Example 33 with Node

use of org.neo4j.graphdb.Node in project neo4j by neo4j.

the class ExpectedTransactionData method compareTo.

void compareTo(TransactionData data) {
    Set<Node> expectedCreatedNodes = new HashSet<>(this.expectedCreatedNodes);
    Set<Relationship> expectedCreatedRelationships = new HashSet<>(this.expectedCreatedRelationships);
    Set<Node> expectedDeletedNodes = new HashSet<Node>(this.expectedDeletedNodes);
    Set<Relationship> expectedDeletedRelationships = new HashSet<>(this.expectedDeletedRelationships);
    Map<Node, Map<String, PropertyEntryImpl<Node>>> expectedAssignedNodeProperties = clone(this.expectedAssignedNodeProperties);
    Map<Relationship, Map<String, PropertyEntryImpl<Relationship>>> expectedAssignedRelationshipProperties = clone(this.expectedAssignedRelationshipProperties);
    Map<Node, Map<String, PropertyEntryImpl<Node>>> expectedRemovedNodeProperties = clone(this.expectedRemovedNodeProperties);
    Map<Relationship, Map<String, PropertyEntryImpl<Relationship>>> expectedRemovedRelationshipProperties = clone(this.expectedRemovedRelationshipProperties);
    Map<Node, Set<String>> expectedAssignedLabels = cloneLabelData(this.expectedAssignedLabels);
    Map<Node, Set<String>> expectedRemovedLabels = cloneLabelData(this.expectedRemovedLabels);
    for (Node node : data.createdNodes()) {
        assertTrue(expectedCreatedNodes.remove(node));
        assertFalse(data.isDeleted(node));
    }
    assertTrue("Expected some created nodes that weren't seen: " + expectedCreatedNodes, expectedCreatedNodes.isEmpty());
    for (Relationship rel : data.createdRelationships()) {
        assertTrue(expectedCreatedRelationships.remove(rel));
        assertFalse(data.isDeleted(rel));
    }
    assertTrue("Expected created relationships not encountered " + expectedCreatedRelationships, expectedCreatedRelationships.isEmpty());
    for (Node node : data.deletedNodes()) {
        assertTrue("Unexpected deleted node " + node, expectedDeletedNodes.remove(node));
        assertTrue(data.isDeleted(node));
    }
    assertTrue("Expected deleted nodes: " + expectedDeletedNodes, expectedDeletedNodes.isEmpty());
    for (Relationship rel : data.deletedRelationships()) {
        assertTrue(expectedDeletedRelationships.remove(rel));
        assertTrue(data.isDeleted(rel));
    }
    assertTrue("Expected deleted relationships not encountered " + expectedDeletedRelationships, expectedDeletedRelationships.isEmpty());
    for (PropertyEntry<Node> entry : data.assignedNodeProperties()) {
        checkAssigned(expectedAssignedNodeProperties, entry);
        assertFalse(data.isDeleted(entry.entity()));
    }
    assertTrue("Expected assigned node properties not encountered " + expectedAssignedNodeProperties, expectedAssignedNodeProperties.isEmpty());
    for (PropertyEntry<Relationship> entry : data.assignedRelationshipProperties()) {
        checkAssigned(expectedAssignedRelationshipProperties, entry);
        assertFalse(data.isDeleted(entry.entity()));
    }
    assertTrue("Expected assigned relationship properties not encountered " + expectedAssignedRelationshipProperties, expectedAssignedRelationshipProperties.isEmpty());
    for (PropertyEntry<Node> entry : data.removedNodeProperties()) {
        checkRemoved(expectedRemovedNodeProperties, entry);
    }
    assertTrue("Expected removed node properties not encountered " + expectedRemovedNodeProperties, expectedRemovedNodeProperties.isEmpty());
    for (PropertyEntry<Relationship> entry : data.removedRelationshipProperties()) {
        checkRemoved(expectedRemovedRelationshipProperties, entry);
    }
    assertTrue("Expected removed relationship properties not encountered " + expectedRemovedRelationshipProperties, expectedRemovedRelationshipProperties.isEmpty());
    for (LabelEntry entry : data.assignedLabels()) {
        check(expectedAssignedLabels, entry);
    }
    assertTrue("Expected assigned labels not encountered " + expectedAssignedLabels, expectedAssignedLabels.isEmpty());
    for (LabelEntry entry : data.removedLabels()) {
        check(expectedRemovedLabels, entry);
    }
    assertTrue("Expected removed labels not encountered " + expectedRemovedLabels, expectedRemovedLabels.isEmpty());
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) Node(org.neo4j.graphdb.Node) LabelEntry(org.neo4j.graphdb.event.LabelEntry) Relationship(org.neo4j.graphdb.Relationship) HashMap(java.util.HashMap) Map(java.util.Map) AutoCreatingHashMap(org.neo4j.kernel.impl.util.AutoCreatingHashMap) HashSet(java.util.HashSet)

Example 34 with Node

use of org.neo4j.graphdb.Node in project neo4j by neo4j.

the class TestTransactionEvents method shouldAccessAssignedLabels.

@Test
public void shouldAccessAssignedLabels() throws Exception {
    // given
    GraphDatabaseService db = dbRule.getGraphDatabaseAPI();
    ChangedLabels labels = (ChangedLabels) db.registerTransactionEventHandler(new ChangedLabels());
    try {
        // when
        try (Transaction tx = db.beginTx()) {
            Node node1 = db.createNode(), node2 = db.createNode(), node3 = db.createNode();
            labels.add(node1, "Foo");
            labels.add(node2, "Bar");
            labels.add(node3, "Baz");
            labels.add(node3, "Bar");
            labels.activate();
            tx.success();
        }
        // then
        assertTrue(labels.isEmpty());
    } finally {
        db.unregisterTransactionEventHandler(labels);
    }
}
Also used : GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) Test(org.junit.Test)

Example 35 with Node

use of org.neo4j.graphdb.Node in project neo4j by neo4j.

the class TestTransactionEvents method shouldGetCorrectTransactionDataUponCommit.

@Test
public void shouldGetCorrectTransactionDataUponCommit() {
    // Create new data, nothing modified, just added/created
    ExpectedTransactionData expectedData = new ExpectedTransactionData();
    VerifyingTransactionEventHandler handler = new VerifyingTransactionEventHandler(expectedData);
    GraphDatabaseService db = dbRule.getGraphDatabaseAPI();
    db.registerTransactionEventHandler(handler);
    Node node1, node2, node3;
    Relationship rel1, rel2;
    try {
        try (Transaction tx = db.beginTx()) {
            node1 = db.createNode();
            expectedData.expectedCreatedNodes.add(node1);
            node2 = db.createNode();
            expectedData.expectedCreatedNodes.add(node2);
            rel1 = node1.createRelationshipTo(node2, RelTypes.TXEVENT);
            expectedData.expectedCreatedRelationships.add(rel1);
            node1.setProperty("name", "Mattias");
            expectedData.assignedProperty(node1, "name", "Mattias", null);
            node1.setProperty("last name", "Persson");
            expectedData.assignedProperty(node1, "last name", "Persson", null);
            node1.setProperty("counter", 10);
            expectedData.assignedProperty(node1, "counter", 10, null);
            rel1.setProperty("description", "A description");
            expectedData.assignedProperty(rel1, "description", "A description", null);
            rel1.setProperty("number", 4.5D);
            expectedData.assignedProperty(rel1, "number", 4.5D, null);
            node3 = db.createNode();
            expectedData.expectedCreatedNodes.add(node3);
            rel2 = node3.createRelationshipTo(node2, RelTypes.TXEVENT);
            expectedData.expectedCreatedRelationships.add(rel2);
            node3.setProperty("name", "Node 3");
            expectedData.assignedProperty(node3, "name", "Node 3", null);
            tx.success();
        }
        assertTrue("Should have been invoked", handler.hasBeenCalled());
        Throwable failure = handler.failure();
        if (failure != null) {
            throw new RuntimeException(failure);
        }
    } finally {
        db.unregisterTransactionEventHandler(handler);
    }
    // Use the above data and modify it, change properties, delete stuff
    expectedData = new ExpectedTransactionData();
    handler = new VerifyingTransactionEventHandler(expectedData);
    db.registerTransactionEventHandler(handler);
    try {
        try (Transaction tx = db.beginTx()) {
            Node newNode = db.createNode();
            expectedData.expectedCreatedNodes.add(newNode);
            Node tempNode = db.createNode();
            Relationship tempRel = tempNode.createRelationshipTo(node1, RelTypes.TXEVENT);
            tempNode.setProperty("something", "Some value");
            tempRel.setProperty("someproperty", 101010);
            tempNode.removeProperty("nothing");
            node3.setProperty("test", "hello");
            node3.setProperty("name", "No name");
            node3.delete();
            expectedData.expectedDeletedNodes.add(node3);
            expectedData.removedProperty(node3, "name", "Node 3");
            node1.setProperty("new name", "A name");
            node1.setProperty("new name", "A better name");
            expectedData.assignedProperty(node1, "new name", "A better name", null);
            node1.setProperty("name", "Nothing");
            node1.setProperty("name", "Mattias Persson");
            expectedData.assignedProperty(node1, "name", "Mattias Persson", "Mattias");
            node1.removeProperty("counter");
            expectedData.removedProperty(node1, "counter", 10);
            node1.removeProperty("last name");
            node1.setProperty("last name", "Hi");
            expectedData.assignedProperty(node1, "last name", "Hi", "Persson");
            rel2.delete();
            expectedData.expectedDeletedRelationships.add(rel2);
            rel1.removeProperty("number");
            expectedData.removedProperty(rel1, "number", 4.5D);
            rel1.setProperty("description", "Ignored");
            rel1.setProperty("description", "New");
            expectedData.assignedProperty(rel1, "description", "New", "A description");
            tempRel.delete();
            tempNode.delete();
            tx.success();
        }
        assertTrue("Should have been invoked", handler.hasBeenCalled());
        Throwable failure = handler.failure();
        if (failure != null) {
            throw new RuntimeException(failure);
        }
    } finally {
        db.unregisterTransactionEventHandler(handler);
    }
}
Also used : GraphDatabaseService(org.neo4j.graphdb.GraphDatabaseService) Transaction(org.neo4j.graphdb.Transaction) Node(org.neo4j.graphdb.Node) Relationship(org.neo4j.graphdb.Relationship) Test(org.junit.Test)

Aggregations

Node (org.neo4j.graphdb.Node)1281 Test (org.junit.Test)781 Transaction (org.neo4j.graphdb.Transaction)540 Relationship (org.neo4j.graphdb.Relationship)375 GraphDatabaseService (org.neo4j.graphdb.GraphDatabaseService)146 NotFoundException (org.neo4j.graphdb.NotFoundException)78 File (java.io.File)65 LinkedList (java.util.LinkedList)60 RelationshipType (org.neo4j.graphdb.RelationshipType)58 HashMap (java.util.HashMap)57 Label (org.neo4j.graphdb.Label)57 Path (org.neo4j.graphdb.Path)52 KernelTransaction (org.neo4j.kernel.api.KernelTransaction)46 HashSet (java.util.HashSet)45 Map (java.util.Map)45 WeightedPath (org.neo4j.graphalgo.WeightedPath)37 TestGraphDatabaseFactory (org.neo4j.test.TestGraphDatabaseFactory)35 ArrayList (java.util.ArrayList)30 List (java.util.List)27 CoreMatchers.containsString (org.hamcrest.CoreMatchers.containsString)26