StoreTooBigForSerializationException {
/*
* create a linked list and save it
*/
final Node node0 = new Node();
node0.setValue(0);
final Node node1 = new Node();
node0.setNext(node1);
node1.setPrevious(node0);
node1.setValue(1);
final Node node2 = new Node();
node1.setNext(node2);
node2.setPrevious(node1);
node2.setValue(2);
final Node node3 = new Node();
node2.setNext(node3);
node3.setPrevious(node2);
node3.setValue(3);
RefToNode refToNode = new RefToNode();
refToNode.setRoot(node0);
refToNode.setCurrent(node2);
store.setRoot(refToNode);
store.save(true, false);
/*
* unreference element in list and suppress it from the list, then save
*/
logger.info("get root");
refToNode = (RefToNode) store.readAndGetRoot();
Node current = refToNode.getCurrent();// it is node 2
Node previous = current.getPrevious(); // it is node 1
Node next = current.getNext();// it is node 3
/* node 2 no more referenced */
refToNode.setCurrent(null);// unreference
previous.setNext(next);
next.setPrevious(previous);
/* add a new object referenced by object modified and detached from root */
next.setObject(new Object()); // node 3 reference a new object
store.save(true, false);
/*
* check
*/
logger.info("check if modification saved");
logger.info("get root");
refToNode = (RefToNode) store.readAndGetRoot();
logger.info("root as current");
current = refToNode.getRoot();// it is node 0
final DataRecordIdentifier currentIdentifier = getIdentifier(current);
assertEquals(BAD_VALUE, 0, current.getValue());
logger.info("get next of current");
next = current.getNext();// it is node 1
logger.info("get previous of next");
previous = next.getPrevious();// it is node 0
final DataRecordIdentifier previousIdentifier = getIdentifier(current);
assertEquals("must be same identifier", currentIdentifier,
previousIdentifier);
logger.info("current id=" + currentIdentifier);
assertSame("bad link", current, previous);
current = next;// it is node 1
assertEquals(BAD_VALUE, 1, current.getValue());
next = current.getNext(); // it is node 3
final Node previousOfNext = next.getPrevious(); // it is node 1
assertSame("bad link", current, previousOfNext);
current = next;// it is node 3
assertEquals(BAD_VALUE, 3, current.getValue());
next = current.getNext();