package org.hibernate.ogm.dialect.ehcache; import java.util.HashMap; import org.junit.Before; import org.junit.Test; import org.hibernate.id.IdentifierGeneratorHelper; import org.hibernate.ogm.datastore.ehcache.impl.EhcacheDatastoreProvider; import org.hibernate.ogm.grid.RowKey; import static org.hamcrest.CoreMatchers.equalTo; import static org.junit.Assert.assertThat; /** * @author Alex Snaps */ public class EhcacheDialectTest { private static final int LOOPS = 2500; private static final int THREADS = 10; private EhcacheDialect dialect; @Before public void setup() { final EhcacheDatastoreProvider datastoreProvider = new EhcacheDatastoreProvider(); datastoreProvider.configure( new HashMap() ); datastoreProvider.start(); dialect = new EhcacheDialect( datastoreProvider ); } @Test public void testIsThreadSafe() throws InterruptedException { final RowKey test = new RowKey( "test", null, null ); Thread[] threads = new Thread[THREADS]; for ( int i = 0; i < threads.length; i++ ) { threads[i] = new Thread( new Runnable() { @Override public void run() { final IdentifierGeneratorHelper.BigIntegerHolder value = new IdentifierGeneratorHelper.BigIntegerHolder(); for ( int i = 0; i < LOOPS; i++ ) { dialect.nextValue( test, value, 1, 1 ); } } } ); threads[i].start(); } for ( Thread thread : threads ) { thread.join(); } final IdentifierGeneratorHelper.BigIntegerHolder value = new IdentifierGeneratorHelper.BigIntegerHolder(); dialect.nextValue( test, value, 0, 1 ); assertThat( value.makeValue().intValue(), equalTo( LOOPS * THREADS ) ); } }