@Test
public void shouldAllowSessionToCreateAndAccessNewChildNodeOnExistingNodeBeforeSave() {

    // Make sure the property does not exist ...
    check(cache).noNode("/childB/newChild");
    print(false);
    // Set property on existing node ...
    MutableCachedNode nodeB = check(session1).mutableNode("/childB");
    NodeKey newKey = session1.createNodeKeyWithIdentifier("newChild");
    long nanos = System.nanoTime();
    MutableCachedNode newChild = nodeB.createChild(session(), newKey, name("newChild"), property("p1a", 344),
                                                   property("p2", false));
    print("Time (createChild): " + millis(Math.abs(System.nanoTime() - nanos)) + " ms");
    assertThat(newChild.getPath(session1), is(path("/childB/newChild")));
    check(session1).children(nodeB, "childC", "childD", "newChild");
    check(session1).property("/childB/newChild", property("p1a", 344));
    check(session1).property("/childB/newChild", property("p2", false));
    // Make sure the other session doesn't see the new child ...
    check(session2).children(nodeB.getKey(), "childC", "childD");
    print(false);
    nanos = System.nanoTime();
    session1.save();
    print(false);
    print("Time (save): " + millis(Math.abs(System.nanoTime() - nanos)) + " ms");
    // Both sessions should see all 3 children ...
    check(session1).children(nodeB, "childC", "childD", "newChild");
    check(session2).children(nodeB, "childC", "childD", "newChild");
    check(session2).property("/childB/newChild", property("p1a", 344));
    check(session2).property("/childB/newChild", property("p2", false));
}