batch.flushIndices();
        batch.shutdown();
        // native neo4j graph load
        final Neo4j2Graph graph = new Neo4j2Graph(directory);
        graph.autoStartTransaction(true);
        assertEquals(count(graph.getIndices()), 1);
        assertEquals(graph.getIndexedKeys(Vertex.class).size(), 2);
        assertTrue(graph.getIndexedKeys(Vertex.class).contains("name"));
        assertTrue(graph.getIndexedKeys(Vertex.class).contains("age"));
        edgeIndex = graph.getIndex("edgeIdx", Edge.class);
        assertEquals(edgeIndex.getIndexClass(), Edge.class);
        assertEquals(count(graph.getVertices()), 10);
        assertTrue(graph.getVertices("nothing", 0) instanceof PropertyFilteredIterable);
        assertTrue(graph.getVertices("blah", "blop") instanceof PropertyFilteredIterable);
        assertFalse(graph.getVertices("name", "marko") instanceof PropertyFilteredIterable); // key index used
        assertFalse(graph.getVertices("age", 32) instanceof PropertyFilteredIterable); // key indexed used
        for (final Vertex vertex : graph.getVertices()) {
            int age = (Integer) vertex.getProperty("age");
            assertEquals(vertex.getProperty("name"), (age / 10) + "");
            assertTrue(graph.getVertices("nothing", 0).iterator().hasNext());
            assertEquals(count(graph.getVertices("age", age)), 1);
            assertEquals(graph.getVertices("age", age).iterator().next(), vertex);
            assertEquals(count(graph.getVertices("name", (age / 10) + "")), 1);
            assertEquals(graph.getVertices("name", (age / 10) + "").iterator().next(), vertex);
            assertEquals(vertex.getPropertyKeys().size(), 3);
            vertex.setProperty("NEW", age);
            assertEquals(vertex.getPropertyKeys().size(), 4);
        }
        for (final Vertex vertex : graph.getVertices()) {
            int age = (Integer) vertex.getProperty("age");
            assertEquals(vertex.getProperty("NEW"), age);
            assertEquals(vertex.getPropertyKeys().size(), 4);
            vertex.removeProperty("NEW");
        }
        for (final Vertex vertex : graph.getVertices()) {
            assertNull(vertex.getProperty("NEW"));
            assertEquals(vertex.getPropertyKeys().size(), 3);
        }
        assertEquals(count(graph.getEdges()), 9);
        assertEquals(count(edgeIndex.get("full", "blah")), 9);
        Set<Edge> edges = new HashSet<Edge>();
        for (Edge edge : edgeIndex.get("full", "blah")) {
            edges.add(edge);
        }
        assertEquals(edges.size(), 9);
        for (final Edge edge : graph.getEdges()) {
            long idA = (Long) edge.getVertex(Direction.OUT).getId();
            long idB = (Long) edge.getVertex(Direction.IN).getId();
            assertEquals(idA + 1, idB);
            assertEquals(edge.getLabel(), idA + "-" + idB);
            assertEquals(edge.getPropertyKeys().size(), 1);
            assertEquals(edge.getProperty("weight"), 0.5f);
            assertEquals(edgeIndex.count("weight", 0.5f), 0);
            assertEquals(edgeIndex.count("unique", idA + "-" + idB), 1);
            assertEquals(edgeIndex.get("unique", idA + "-" + idB).iterator().next(), edge);
            assertTrue(edges.contains(edge));
        }
        graph.shutdown();
    }