package org.neo4j.util; import java.util.ArrayList; import java.util.List; import org.neo4j.kernel.impl.event.EventData; import org.neo4j.util.CrudEventBufferFilter; import org.neo4j.util.CrudEventData; import org.neo4j.util.CrudEventFilter; import org.neo4j.util.EventContext; import org.neo4j.util.CrudEventData.AlterationMode; /** * Tests THE CRUD event filters. * @author mattias */ public class TestEventFilters extends Neo4jTest { /** * Tests the {@link CrudEventFilter} class. */ public void testCrudEventFilter() { CrudEventFilter filter = new CrudEventFilter(); assertTrue( filter.pass( null, data( 0, AlterationMode.CREATED ) ) ); assertTrue( !filter.pass( null, data( 0, AlterationMode.CREATED ) ) ); assertTrue( !filter.pass( null, data( 0, AlterationMode.MODIFIED ) ) ); assertTrue( filter.pass( null, data( 0, AlterationMode.DELETED ) ) ); assertTrue( filter.pass( null, data( 1, AlterationMode.MODIFIED ) ) ); assertTrue( !filter.pass( null, data( 1, AlterationMode.CREATED ) ) ); assertTrue( !filter.pass( null, data( 1, AlterationMode.MODIFIED ) ) ); assertTrue( filter.pass( null, data( 1, AlterationMode.DELETED ) ) ); assertTrue( !filter.pass( null, data( 1, AlterationMode.CREATED ) ) ); assertTrue( !filter.pass( null, data( 1, AlterationMode.MODIFIED ) ) ); assertTrue( filter.pass( null, data( 2, AlterationMode.DELETED ) ) ); assertTrue( !filter.pass( null, data( 2, AlterationMode.CREATED ) ) ); assertTrue( !filter.pass( null, data( 2, AlterationMode.MODIFIED ) ) ); } /** * Tests the {@link CrudEventBufferFilter} class. */ public void testCrudEventBufferFilter() { List<EventContext> l = new ArrayList<EventContext>(); l.add( new EventContext( null, data( 0, AlterationMode.CREATED ) ) ); l.add( new EventContext( null, data( 0, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 0, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 0, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 1, AlterationMode.CREATED ) ) ); l.add( new EventContext( null, data( 1, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 2, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 2, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 2, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 0, AlterationMode.DELETED ) ) ); l.add( new EventContext( null, data( 0, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 0, AlterationMode.MODIFIED ) ) ); l.add( new EventContext( null, data( 3, AlterationMode.DELETED ) ) ); l.add( new EventContext( null, data( 3, AlterationMode.MODIFIED ) ) ); CrudEventBufferFilter filter = new CrudEventBufferFilter(); EventContext[] a = filter.filter( l.toArray( new EventContext[ l.size() ] ) ); assertEquals( 4, a.length ); assertTrue( isEqual( a[ 0 ], data( 1, AlterationMode.CREATED ) ) ); assertTrue( isEqual( a[ 1 ], data( 2, AlterationMode.MODIFIED ) ) ); assertTrue( isEqual( a[ 2 ], data( 0, AlterationMode.DELETED ) ) ); assertTrue( isEqual( a[ 3 ], data( 3, AlterationMode.DELETED ) ) ); } private EventData data( long id, AlterationMode mode ) { return new EventData( new Data( id, mode ) ); } private boolean isEqual( EventContext context, EventData data ) { CrudEventData d = ( CrudEventData ) data.getData(); CrudEventData target = ( CrudEventData ) context.getData().getData(); return target.getNodeId() == d.getNodeId() && target.getAlterationMode() == d.getAlterationMode(); } private static class Data extends CrudEventData { private long id; Data( long id, AlterationMode mode ) { super( mode ); this.id = id; } @Override public long getNodeId() { return this.id; } } }