@Test public void shouldReportMissingOwnerId() throws Exception { // given DynamicRecord nodeDynamicLabelRecord = inUse( new DynamicRecord( 0 ) ) ; allocateFromNumbers( new ArrayList<DynamicRecord>(), new long[] { }, iterator( nodeDynamicLabelRecord ), RECORD_ALLOCATOR ); // when DynamicLabelConsistencyReport report = check( nodeDynamicLabelRecord ); // then verify( report ).orphanDynamicLabelRecord(); }
@Test public void shouldReportOwningNodeRecordNotPointingBack() throws Exception { // given long nodeId = 12l; Collection<DynamicRecord> validLabelRecords = new ArrayList<>(); allocateFromNumbers( validLabelRecords, new long[] {nodeId}, iterator( inUse( new DynamicRecord( 0 ) ) ), RECORD_ALLOCATOR ); Collection<DynamicRecord> fakePointedToRecords = new ArrayList<>(); allocateFromNumbers( fakePointedToRecords, new long[] {nodeId}, iterator( inUse( new DynamicRecord( 1 ) ) ), RECORD_ALLOCATOR ); NodeRecord nodeRecord = inUse( new NodeRecord( nodeId, false, -1, -1 ) ); nodeRecord.setLabelField( dynamicPointer( fakePointedToRecords ), fakePointedToRecords ); add( nodeRecord ); // when DynamicLabelConsistencyReport report = check( single( validLabelRecords.iterator() ) ); // then verify( report ).orphanDynamicLabelRecordDueToInvalidOwner( nodeRecord ); } }
@Test public void shouldReportOwningNodeRecordNotInUse() throws Exception { // given NodeRecord nodeRecord = notInUse( new NodeRecord( 12l, false, -1, -1 ) ); add( nodeRecord ); DynamicRecord nodeDynamicLabelRecord = inUse( new DynamicRecord( 0 ) ); allocateFromNumbers( new ArrayList<DynamicRecord>(), new long[]{12l}, iterator( nodeDynamicLabelRecord ), RECORD_ALLOCATOR ); // when DynamicLabelConsistencyReport report = check( nodeDynamicLabelRecord ); // then verify( report ).orphanDynamicLabelRecordDueToInvalidOwner( nodeRecord ); }
@Override protected void transactionData( GraphStoreFixture.TransactionDataBuilder tx, GraphStoreFixture.IdGenerator next ) { DynamicRecord record1 = inUse( new DynamicRecord( chain.get( 0 ).getId() ) ); DynamicRecord record2 = notInUse( new DynamicRecord( chain.get( 1 ).getId() ) ); long[] data = (long[]) getRightArray( readFullByteArrayFromHeavyRecords( chain, ARRAY ) ); PreAllocatedRecords allocator = new PreAllocatedRecords( 60 ); allocateFromNumbers( new ArrayList<DynamicRecord>(), Arrays.copyOf( data, 11 ), iterator( record1 ), allocator ); NodeRecord before = inUse( new NodeRecord( data[0], false, -1, -1 ) ); NodeRecord after = inUse( new NodeRecord( data[0], false, -1, -1 ) ); before.setLabelField( dynamicPointer( asList( record1 ) ), chain ); after.setLabelField( dynamicPointer( asList( record1 ) ), asList( record1, record2 ) ); tx.update( before, after ); } } );
@Override protected void transactionData( GraphStoreFixture.TransactionDataBuilder tx, GraphStoreFixture.IdGenerator next ) { NodeRecord nodeRecord = new NodeRecord( next.node(), false, -1, -1 ); DynamicRecord record = inUse( new DynamicRecord( next.nodeLabel() ) ); Collection<DynamicRecord> newRecords = new ArrayList<>(); allocateFromNumbers( newRecords, prependNodeId( nodeRecord.getLongId(), new long[]{42l} ), iterator( record ), new PreAllocatedRecords( 60 ) ); nodeRecord.setLabelField( dynamicPointer( newRecords ), newRecords ); tx.create( nodeRecord ); } } );
@Test @Ignore("2013-07-17 Revisit once we store sorted label ids") public void shouldReportOrphanRecordsThatAreNotFirst() throws Exception { // given DynamicRecord record0 = addNodeDynamicLabels( inUse( new DynamicRecord( 0 ) ) ); DynamicRecord record1 = addNodeDynamicLabels( inUse( new DynamicRecord( 1 ) ) ); DynamicRecord record2 = addNodeDynamicLabels( inUse( new DynamicRecord( 2 ) ) ); long[] longs = new long[130]; for ( int i = 0; i < longs.length; i++ ) { longs[i] = i; } allocateFromNumbers( new ArrayList<DynamicRecord>(), longs, iterator( record0, record1, record2 ), RECORD_ALLOCATOR ); record0.setInUse( false ); // when DynamicLabelConsistencyReport report = check( record1 ); // then verify( report ).orphanDynamicLabelRecord(); }
@Override protected void transactionData( GraphStoreFixture.TransactionDataBuilder tx, GraphStoreFixture.IdGenerator next ) { tx.nodeLabel( 42, "Label" ); NodeRecord nodeRecord = new NodeRecord( next.node(), false, -1, -1 ); DynamicRecord record = inUse( new DynamicRecord( next.nodeLabel() ) ); Collection<DynamicRecord> newRecords = new ArrayList<>(); allocateFromNumbers( newRecords, prependNodeId( next.node(), new long[]{42l} ), iterator( record ), new PreAllocatedRecords( 60 ) ); nodeRecord.setLabelField( dynamicPointer( newRecords ), newRecords ); tx.create( nodeRecord ); } } );
@Override protected void transactionData( GraphStoreFixture.TransactionDataBuilder tx, GraphStoreFixture.IdGenerator next ) { tx.nodeLabel( 42, "Label" ); NodeRecord nodeRecord = new NodeRecord( next.node(), false, -1, -1 ); DynamicRecord record = inUse( new DynamicRecord( next.nodeLabel() ) ); Collection<DynamicRecord> newRecords = new ArrayList<>(); allocateFromNumbers( newRecords, prependNodeId( nodeRecord.getLongId(), new long[]{42l, 42l} ), iterator( record ), new PreAllocatedRecords( 60 ) ); nodeRecord.setLabelField( dynamicPointer( newRecords ), newRecords ); tx.create( nodeRecord ); } } );
@Override protected void transactionData( GraphStoreFixture.TransactionDataBuilder tx, GraphStoreFixture.IdGenerator next ) { NodeRecord nodeRecord = new NodeRecord( next.node(), false, -1, -1 ); DynamicRecord record1 = inUse( new DynamicRecord( next.nodeLabel() ) ); DynamicRecord record2 = inUse( new DynamicRecord( next.nodeLabel() ) ); DynamicRecord record3 = inUse( new DynamicRecord( next.nodeLabel() ) ); labels[0] = nodeRecord.getLongId(); // the first id should not be a label id, but the id of the node PreAllocatedRecords allocator = new PreAllocatedRecords( 60 ); allocateFromNumbers( chain, labels, iterator( record1, record2, record3 ), allocator ); nodeRecord.setLabelField( dynamicPointer( chain ), chain ); tx.create( nodeRecord ); } } );