You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@onami.apache.org by sc...@apache.org on 2014/04/07 16:12:21 UTC
svn commit: r1585487 [3/5] - in /onami/sandbox/persist: ./
src/main/java/org/apache/onami/persist/ src/sandbox/
src/test/java/org/apache/onami/persist/
src/test/java/org/apache/onami/persist/test/
src/test/java/org/apache/onami/persist/test/transaction...
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,93 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+/**
+ * Test for {@link AggregatedException}.
+ */
+public class AggregatedExceptionTest
+{
+ private AggregatedException.Builder sut;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ sut = new AggregatedException.Builder();
+ }
+
+ @Test
+ public void shouldNotThrowAnythingWhenEmpty()
+ {
+ sut.throwRuntimeExceptionIfHasCauses( "test msg" );
+ }
+
+ @Test
+ public void shouldThrowAggregatedExceptionWithAllCollectedExceptions()
+ {
+ final Exception e0 = new Exception();
+ final Exception e1 = new Exception();
+
+ try
+ {
+ sut.add( e0 );
+ sut.add( e1 );
+ sut.throwRuntimeExceptionIfHasCauses( "test msg" );
+ }
+
+ catch ( AggregatedException e )
+ {
+ assertThat( e.getNumCauses(), is( 2 ) );
+ assertThat( e.getCauses()[0], sameInstance( (Throwable) e0 ) );
+ assertThat( e.getCauses()[1], sameInstance( (Throwable) e1 ) );
+ return;
+ }
+
+ fail( "must throw AggregatedException" );
+ }
+
+ @Test
+ public void shouldThrowOriginalExceptionWhenOnlyOne()
+ {
+ Exception e0 = new RuntimeException( );
+
+ try
+ {
+ sut.add( e0 );
+ sut.throwRuntimeExceptionIfHasCauses( "test msg" );
+ }
+
+ catch ( RuntimeException e )
+ {
+ assertThat( e, sameInstance( (Throwable) e0 ) );
+ return;
+ }
+
+ fail( "must throw RuntimeException" );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/AggregatedExceptionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,146 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManagerFactory;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link ApplicationManagedEntityManagerFactoryProviderTest}.
+ */
+public class ApplicationManagedEntityManagerFactoryProviderTest
+{
+ private ApplicationManagedEntityManagerFactoryProvider sut;
+
+ private EntityManagerFactory emf;
+
+ private EntityManagerFactoryFactory emfFactory;
+
+ @Before
+ public void setup()
+ {
+ // input
+ emfFactory = mock( EntityManagerFactoryFactory.class );
+
+ // subject under test
+ sut = new ApplicationManagedEntityManagerFactoryProvider( emfFactory );
+
+ // helpers
+ emf = mock( EntityManagerFactory.class );
+ doReturn( emf ).when( emfFactory ).createApplicationManagedEntityManagerFactory();
+ }
+
+ @Test
+ public void isRunningShouldReturnFalseBeforeStarting()
+ {
+ assertThat( sut.isRunning(), is( false ) );
+ }
+
+ @Test
+ public void stoppingWhenNotRunningShouldDoNothing()
+ {
+ sut.stop();
+
+ assertThat( sut.isRunning(), is( false ) );
+ }
+
+ @Test
+ public void isRunningShouldReturnTrueAfterStarting()
+ {
+ sut.start();
+
+ assertThat( sut.isRunning(), is( true ) );
+ verify( emfFactory ).createApplicationManagedEntityManagerFactory();
+ }
+
+ @Test( expected = IllegalStateException.class )
+ public void startingAfterAlreadyStartedShouldThrowException()
+ {
+ sut.start();
+ sut.start();
+ }
+
+ @Test
+ public void isRunningShouldReturnFalseAfterStartingAndStopping()
+ {
+ sut.start();
+ sut.stop();
+
+ assertThat( sut.isRunning(), is( false ) );
+ verify( emf ).close();
+ }
+
+ @Test
+ public void restartingShouldWork()
+ {
+ sut.start();
+ sut.stop();
+ sut.start();
+
+ assertThat( sut.isRunning(), is( true ) );
+ verify( emfFactory, times( 2 ) ).createApplicationManagedEntityManagerFactory();
+ verify( emf ).close();
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void stopShouldWorkEvenInCaseOfException()
+ {
+ doThrow( new RuntimeException() ).when( emf ).close();
+
+ sut.start();
+ try
+ {
+ sut.stop();
+ }
+ finally
+ {
+
+ assertThat( sut.isRunning(), is( false ) );
+ verify( emf ).close();
+ }
+ }
+
+ @Test( expected = IllegalStateException.class )
+ public void getShouldThrowExceptionWhenNotStarted()
+ {
+ sut.get();
+ }
+
+ @Test
+ public void getShouldReturnEmf()
+ {
+ sut.start();
+
+ assertThat( sut.get(), sameInstance( emf ) );
+ }
+
+ @Test( expected = NullPointerException.class )
+ public void emfFactoryIsMandatory()
+ {
+ new ApplicationManagedEntityManagerFactoryProvider( null );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ApplicationManagedEntityManagerFactoryProviderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,128 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManagerFactory;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link ContainerManagedEntityManagerFactoryProvider}.
+ */
+public class ContainerManagedEntityManagerFactoryProviderTest
+{
+ private ContainerManagedEntityManagerFactoryProvider sut;
+
+ private EntityManagerFactory emf;
+
+ private EntityManagerFactorySource emfSource;
+
+ @Before
+ public void setup()
+ {
+ // input
+ emfSource = mock( EntityManagerFactorySource.class );
+
+ // subject under test
+ sut = new ContainerManagedEntityManagerFactoryProvider( emfSource );
+
+ // helpers
+ emf = mock( EntityManagerFactory.class );
+ doReturn( emf ).when( emfSource ).getEntityManagerFactory();
+ }
+
+ @Test
+ public void isRunningShouldReturnFalseBeforeStarting()
+ {
+ assertThat( sut.isRunning(), is( false ) );
+ }
+
+ @Test
+ public void stoppingWhenNotRunningShouldDoNothing()
+ {
+ sut.stop();
+
+ assertThat( sut.isRunning(), is( false ) );
+ }
+
+ @Test
+ public void isRunningShouldReturnTrueAfterStarting()
+ {
+ sut.start();
+
+ assertThat( sut.isRunning(), is( true ) );
+ verify( emfSource ).getEntityManagerFactory();
+ }
+
+ @Test( expected = IllegalStateException.class )
+ public void startingAfterAlreadyStartedShouldThrowException()
+ {
+ sut.start();
+ sut.start();
+ }
+
+ @Test
+ public void isRunningShouldReturnFalseAfterStartingAndStopping()
+ {
+ sut.start();
+ sut.stop();
+
+ assertThat( sut.isRunning(), is( false ) );
+ verify( emf, never() ).close();
+ }
+
+ @Test
+ public void restartingShouldWork()
+ {
+ sut.start();
+ sut.stop();
+ sut.start();
+
+ assertThat( sut.isRunning(), is( true ) );
+ verify( emfSource, times( 2 ) ).getEntityManagerFactory();
+ verify( emf, never() ).close();
+ }
+
+ @Test( expected = IllegalStateException.class )
+ public void getShouldThrowExceptionWhenNotStarted()
+ {
+ sut.get();
+ }
+
+ @Test
+ public void getShouldReturnEmf()
+ {
+ sut.start();
+
+ assertThat( sut.get(), sameInstance( emf ) );
+ }
+
+ @Test( expected = NullPointerException.class )
+ public void emfSourceIsMandatory()
+ {
+ new ContainerManagedEntityManagerFactoryProvider( null );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ContainerManagedEntityManagerFactoryProviderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,68 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManagerFactory;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test for {@link EntityManagerFactoryFactory}.
+ */
+public class EntityManagerFactoryFactoryTest
+{
+
+ private static final String TEST_KEY = "testKey";
+
+ private static final String TEST_VALUE = "testValue";
+
+ private static final String PU_NAME = "testUnit";
+
+ private static final String PU_KEY = "hibernate.ejb.persistenceUnitName";
+
+ private EntityManagerFactoryFactory sut;
+
+ private Properties properties;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ properties = new Properties( );
+ sut = new EntityManagerFactoryFactory( PU_NAME, properties );
+ }
+
+ @Test
+ public void shouldCreateAnInstanceWithThePassedValues()
+ {
+ // given
+ properties.setProperty( TEST_KEY, TEST_VALUE );
+ // when
+ final EntityManagerFactory result = sut.createApplicationManagedEntityManagerFactory();
+ // then
+ assertThat( result.getProperties().get( PU_KEY ), is( (Object) PU_NAME ) );
+ assertThat( result.getProperties().get( TEST_KEY ), is( (Object) TEST_VALUE ) );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactoryFactoryTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,56 @@
+package org.apache.onami.persist;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManagerFactory;
+
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+public class EntityManagerFactorySourceByJndiLookupTest
+{
+
+ public static final String JNDI_NAME = "jndiName";
+
+ private EntityManagerFactorySourceByJndiLookup sut;
+
+ private JndiLookupHelper jndiLookupHelper;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ jndiLookupHelper = mock( JndiLookupHelper.class );
+ sut = new EntityManagerFactorySourceByJndiLookup( JNDI_NAME, jndiLookupHelper );
+ }
+
+
+ @Test
+ public void shouldLookupEmfByJndiName()
+ throws Exception
+ {
+ // given
+ final EntityManagerFactory emf = mock( EntityManagerFactory.class );
+ doReturn( emf ).when( jndiLookupHelper ).doJndiLookup( EntityManagerFactory.class, JNDI_NAME );
+ // when
+ final EntityManagerFactory result = sut.getEntityManagerFactory();
+ // then
+ assertThat( result, sameInstance( emf ) );
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void jndiNameIsMandatory()
+ {
+ new EntityManagerFactorySourceByJndiLookup( null, jndiLookupHelper );
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void jndiLookupHelperIsMandatory()
+ {
+ new EntityManagerFactorySourceByJndiLookup( JNDI_NAME, null );
+ }
+
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceByJndiLookupTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,39 @@
+package org.apache.onami.persist;
+
+import com.google.inject.Provider;
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManagerFactory;
+
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+public class EntityManagerFactorySourceViaProviderTest
+{
+ private EntityManagerFactorySourceViaProvider sut;
+
+ private Provider<EntityManagerFactory> emfProvider;
+
+ @Before
+ @SuppressWarnings( "unchecked" )
+ public void setUp()
+ throws Exception
+ {
+ emfProvider = mock(Provider.class);
+ sut = new EntityManagerFactorySourceViaProvider( emfProvider );
+ }
+
+ @Test
+ public void shouldReturnValueFromProvider() {
+ // given
+ EntityManagerFactory emfDummy = mock(EntityManagerFactory.class);
+ doReturn( emfDummy ).when( emfProvider ).get();
+ // when
+ final EntityManagerFactory result = sut.getEntityManagerFactory();
+ // then
+ assertThat(result, sameInstance(emfDummy));
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerFactorySourceViaProviderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,179 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import java.util.Properties;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link EntityManagerProviderImpl}.
+ */
+public class EntityManagerProviderImplTest
+{
+ private EntityManagerProviderImpl sut;
+
+ private EntityManagerFactoryProvider emfProvider;
+
+ private EntityManager em;
+
+ private Properties properties;
+
+ private EntityManagerFactory emf;
+
+ @Before
+ public void setUp()
+ {
+ // input
+ emfProvider = mock( EntityManagerFactoryProvider.class );
+ properties = new Properties();
+
+ // subject under test
+ sut = new EntityManagerProviderImpl( emfProvider, properties );
+
+ // helpers
+ emf = mock( EntityManagerFactory.class );
+ doReturn( emf ).when( emfProvider ).get();
+
+ em = mock( EntityManager.class );
+ doReturn( em ).when( emf ).createEntityManager( properties );
+ }
+
+ @Test
+ public void newInstanceShouldNotBeActive()
+ {
+ assertThat( sut.isActive(), is( false ) );
+ }
+
+ @Test
+ public void stoppingShouldDoNothingIfNotActive()
+ {
+ sut.end();
+
+ assertThat( sut.isActive(), is( false ) );
+ }
+
+ @Test
+ public void shouldBeActiveAfterStarting()
+ {
+ sut.begin();
+
+ verify( emf ).createEntityManager( properties );
+ assertThat( sut.isActive(), is( true ) );
+ }
+
+ @Test
+ public void shouldNotBeActiveAfterStartingAndStopping()
+ {
+ sut.begin();
+ sut.end();
+
+ verify( emf ).createEntityManager( properties );
+ verify( em ).close();
+ assertThat( sut.isActive(), is( false ) );
+ }
+
+ @Test
+ public void shouldNotBeActiveAfterStartingAndStoppingEvenWhenExceptionThrown()
+ {
+ doThrow( new RuntimeException() ).when( em ).close();
+
+ try
+ {
+ sut.begin();
+ sut.end();
+ }
+
+ catch ( RuntimeException e )
+ {
+ verify( emf ).createEntityManager( properties );
+ verify( em ).close();
+ assertThat( sut.isActive(), is( false ) );
+ return;
+ }
+ fail( "expected RuntimeException to be thrown" );
+ }
+
+ @Test
+ public void restartingShouldWork()
+ {
+ sut.begin();
+ sut.end();
+ sut.begin();
+
+ verify( emf, times( 2 ) ).createEntityManager( properties );
+ verify( em ).close();
+ assertThat( sut.isActive(), is( true ) );
+ }
+
+ @Test( expected = IllegalStateException.class )
+ public void startingWhenActiveShouldThrowException()
+ {
+ sut.begin();
+ sut.begin();
+ }
+
+ @Test
+ public void shouldReturnTheEntityManager()
+ {
+ sut.begin();
+ final EntityManager result = sut.get();
+
+ assertThat( result, sameInstance( em ) );
+ }
+
+ @Test( expected = IllegalStateException.class )
+ public void shouldThrowExceptionWhenGettingEntityManagerAndUnitOfWorkIsNotActive()
+ {
+ sut.get();
+ }
+
+ @Test( expected = NullPointerException.class )
+ public void entityManagerFactoryProviderIsMandatory()
+ {
+ new EntityManagerProviderImpl( null, properties );
+ }
+
+ @Test
+ public void propertiesAreOptional()
+ {
+ new EntityManagerProviderImpl( emfProvider, null );
+ }
+
+ @Test
+ public void shouldCreateEntityManagerWithoutPropertiesIfNull()
+ {
+ doReturn( em ).when( emf ).createEntityManager();
+ sut = new EntityManagerProviderImpl( emfProvider, null );
+
+ sut.begin();
+
+ verify( emf ).createEntityManager();
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,119 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.stubbing.Answer;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import java.util.concurrent.CountDownLatch;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link org.apache.onami.persist.EntityManagerProviderImpl}.
+ * This class tests the behavior of the impl in the context of multiple threads.
+ */
+public class EntityManagerProviderImplThreadingTest
+{
+ private EntityManagerProviderImpl sut;
+
+ private EntityManagerFactory emf;
+
+ @Before
+ public void setUp()
+ {
+ // input
+ final EntityManagerFactoryProvider emfProvider = mock( EntityManagerFactoryProvider.class );
+
+ // subject under test
+ sut = new EntityManagerProviderImpl( emfProvider, null );
+
+ // helpers
+ emf = mock( EntityManagerFactory.class );
+ doReturn( emf ).when( emfProvider ).get();
+
+ doAnswer( new Answer()
+ {
+ public Object answer( InvocationOnMock invocation )
+ throws Throwable
+ {
+ return mock( EntityManager.class );
+ }
+ } ).when( emf ).createEntityManager();
+ }
+
+ @Test
+ public void beginShouldBeCallableFromMultipleThreads()
+ {
+ for ( int i = 0; i < 5; i++ )
+ {
+ new Thread( new Runnable()
+ {
+ public void run()
+ {
+ assertThat( sut.isActive(), is( false ) );
+
+ sut.begin();
+
+ assertThat( sut.isActive(), is( true ) );
+ }
+ } ).start();
+ }
+ }
+
+ @Test
+ public void getShouldReturnTheSameInstanceInTheSameThread()
+ throws Exception
+ {
+ final int numThreads = 5;
+ final CountDownLatch latch = new CountDownLatch( numThreads );
+ for ( int i = 0; i < numThreads; i++ )
+ {
+ new Thread( new Runnable()
+ {
+ public void run()
+ {
+ sut.begin();
+
+ final EntityManager em1 = sut.get();
+ final EntityManager em2 = sut.get();
+ final EntityManager em3 = sut.get();
+ final EntityManager em4 = sut.get();
+
+ latch.countDown();
+
+ assertTrue( em1 == em2 );
+ assertTrue( em1 == em3 );
+ assertTrue( em1 == em4 );
+ }
+ } ).start();
+ }
+
+ latch.await();
+ verify( emf, times( numThreads ) ).createEntityManager();
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/EntityManagerProviderImplThreadingTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,64 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.naming.spi.InitialContextFactory;
+import java.util.Hashtable;
+
+/**
+ * JNDI Context Factory for test.
+ */
+public class InitialContextFactoryStub
+ implements InitialContextFactory
+{
+
+ private static final ThreadLocal<Context> THREAD_LOCAL_CONTEXT = new ThreadLocal<Context>();
+
+ static
+ {
+ System.setProperty( Context.INITIAL_CONTEXT_FACTORY, InitialContextFactoryStub.class.getName() );
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Context getInitialContext( Hashtable<?, ?> environment )
+ throws NamingException
+ {
+ final Context context = THREAD_LOCAL_CONTEXT.get();
+ if ( context == null )
+ {
+ throw new NamingException( "No context registered" );
+ }
+ return context;
+ }
+
+ /**
+ * Registers a context which will be returned when a lookup in the same thread is done.
+ *
+ * @param context the context to return for lookups made by the same thread.
+ */
+ public static void registerContext( Context context )
+ {
+ THREAD_LOCAL_CONTEXT.set( context );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/InitialContextFactoryStub.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,70 @@
+package org.apache.onami.persist;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.persistence.EntityManagerFactory;
+
+import static org.hamcrest.CoreMatchers.sameInstance;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
+
+public class JndiLookupHelperTest
+{
+
+ public static final String JNDI_NAME = "jndiName";
+
+ private JndiLookupHelper sut;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ sut = new JndiLookupHelper();
+ }
+
+
+ @Test
+ public void shouldLookupEmfByJndiName()
+ throws Exception
+ {
+ // given
+ final Context context = mock( Context.class );
+ final EntityManagerFactory emf = mock( EntityManagerFactory.class );
+ doReturn( emf ).when( context ).lookup( JNDI_NAME );
+ InitialContextFactoryStub.registerContext( context );
+ // when
+ final EntityManagerFactory result = sut.doJndiLookup( EntityManagerFactory.class, JNDI_NAME );
+ // then
+ assertThat( result, sameInstance( emf ) );
+ }
+
+ @Test( expected = NullPointerException.class )
+ public void shouldThrowExceptionIfContextReturnsNull()
+ throws Exception
+ {
+ // given
+ final Context context = mock( Context.class );
+ doReturn( null ).when( context ).lookup( JNDI_NAME );
+ InitialContextFactoryStub.registerContext( context );
+ // when
+ sut.doJndiLookup( EntityManagerFactory.class, JNDI_NAME );
+ }
+
+ @Test( expected = RuntimeException.class )
+ public void shouldWrapNamingException()
+ throws Exception
+ {
+ // given
+ final Context context = mock( Context.class );
+ doThrow( new NamingException() ).when( context ).lookup( JNDI_NAME );
+ InitialContextFactoryStub.registerContext( context );
+ // when
+ sut.doJndiLookup( EntityManagerFactory.class, JNDI_NAME );
+ }
+
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JndiLookupHelperTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,145 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import de.bechte.junit.runners.context.HierarchicalContextRunner;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.persistence.EntityManager;
+
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link JtaTransactionFacadeFactory}.
+ */
+@RunWith( HierarchicalContextRunner.class )
+public class JtaTransactionFacadeProviderTest
+{
+ private JtaTransactionFacadeFactory sut;
+
+ private UserTransactionFacade utFacade;
+
+ private EntityManagerProvider emProvider;
+
+ private EntityManager em;
+
+ @Before
+ public void setUp()
+ {
+ // input
+ utFacade = mock( UserTransactionFacade.class );
+ emProvider = mock( EntityManagerProvider.class );
+
+ // subject under test
+ sut = new JtaTransactionFacadeFactory( utFacade, emProvider );
+
+ // environment
+ em = mock( EntityManager.class );
+ doReturn( em ).when( emProvider ).get();
+ }
+
+ public class InnerTransactionTest
+ {
+
+ private TransactionFacade sut;
+
+ @Before
+ public void setUp()
+ {
+ doReturn( true ).when( utFacade ).isActive();
+ sut = JtaTransactionFacadeProviderTest.this.sut.createTransactionFacade();
+ }
+
+ @Test
+ public void beginShouldDoNothing()
+ {
+ sut.begin();
+
+ verify( utFacade, never() ).begin();
+ verify( em ).joinTransaction();
+ }
+
+ @Test
+ public void commitShouldDoNothing()
+ {
+ sut.commit();
+
+ verify( utFacade, never() ).commit();
+ }
+
+ @Test
+ public void rollbackShouldSetRollbackOnlyFlag()
+ {
+ sut.rollback();
+
+ verify( utFacade ).setRollbackOnly();
+ }
+ }
+
+ public class OuterTransactionTest
+ {
+
+ private TransactionFacade sut;
+
+ @Before
+ public void setUp()
+ {
+ doReturn( false ).when( utFacade ).isActive();
+ sut = JtaTransactionFacadeProviderTest.this.sut.createTransactionFacade();
+ }
+
+ @Test
+ public void beginShouldBeginTransaction()
+ {
+ sut.begin();
+
+ verify( utFacade ).begin();
+ verify( em ).joinTransaction();
+ }
+
+ @Test
+ public void commitShouldCommitTransaction()
+ {
+ sut.commit();
+
+ verify( utFacade ).commit();
+ }
+
+ @Test
+ public void commitShouldRollbackTransactionIfMarkedAsRollbackOnly()
+ {
+ doReturn( true ).when( utFacade ).getRollbackOnly();
+
+ sut.commit();
+
+ verify( utFacade ).rollback();
+ }
+
+ @Test
+ public void rollbackShouldRollbackTransaction()
+ {
+ sut.rollback();
+
+ verify( utFacade ).rollback();
+ }
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/JtaTransactionFacadeProviderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,34 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation for unit tests.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
+public @interface OtherPersistenceUnit
+{
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/OtherPersistenceUnit.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,111 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InOrder;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link PersistenceFilter}.
+ */
+public class PersistenceFilterTest
+{
+ private PersistenceFilter sut;
+
+ private PersistenceUnitContainer persistenceUnitsContainer;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ persistenceUnitsContainer = mock( PersistenceUnitContainer.class );
+ sut = new PersistenceFilter( persistenceUnitsContainer );
+ }
+
+ @Test
+ public void initShouldStartService()
+ throws Exception
+ {
+ sut.init( mock( FilterConfig.class ) );
+ verify( persistenceUnitsContainer ).startAllStoppedPersistenceServices();
+ }
+
+ @Test
+ public void destroyShouldStopService()
+ {
+ sut.destroy();
+ verify( persistenceUnitsContainer ).stopAllRunningPersistenceServices();
+ }
+
+ @Test
+ public void doFilterShouldSpanUnitOfWork()
+ throws Exception
+ {
+ // given
+ final FilterChain chain = mock( FilterChain.class );
+ final InOrder inOrder = inOrder( persistenceUnitsContainer, chain );
+
+ final ServletRequest request = mock( ServletRequest.class );
+ final ServletResponse response = mock( ServletResponse.class );
+
+ // when
+ sut.doFilter( request, response, chain );
+
+ // then
+ inOrder.verify( persistenceUnitsContainer ).beginAllInactiveUnitsOfWork();
+ inOrder.verify( chain ).doFilter( request, response );
+ inOrder.verify( persistenceUnitsContainer ).endAllUnitsOfWork();
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void doFilterShouldEndUnitOfWorkInCaseOfException()
+ throws Exception
+ {
+ // given
+ final FilterChain chain = mock( FilterChain.class );
+ final InOrder inOrder = inOrder( persistenceUnitsContainer, chain );
+
+ final ServletRequest request = mock( ServletRequest.class );
+ final ServletResponse response = mock( ServletResponse.class );
+
+ doThrow( new RuntimeException() ).when( chain ).doFilter( request, response );
+
+ // when
+ try
+ {
+ sut.doFilter( request, response, chain );
+ }
+ // then
+ finally
+ {
+ inOrder.verify( persistenceUnitsContainer ).beginAllInactiveUnitsOfWork();
+ inOrder.verify( chain ).doFilter( request, response );
+ inOrder.verify( persistenceUnitsContainer ).endAllUnitsOfWork();
+ }
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceFilterTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,244 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link PersistenceUnitContainer}.
+ */
+public class PersistenceUnitContainerTest
+{
+ private PersistenceUnitContainer sut;
+
+ private PersistenceService ps1;
+
+ private PersistenceService ps2;
+
+ private UnitOfWork uow1;
+
+ private UnitOfWork uow2;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ sut = new PersistenceUnitContainer();
+
+ ps1 = mock( PersistenceService.class );
+ ps2 = mock( PersistenceService.class );
+
+ uow1 = mock( UnitOfWork.class );
+ uow2 = mock( UnitOfWork.class );
+
+ sut.add( ps1, uow1 );
+ sut.add( ps2, uow2 );
+ }
+
+ @Test
+ public void shouldStartOnAllPersistenceServices()
+ throws Exception
+ {
+ // when
+ sut.startAllStoppedPersistenceServices();
+
+ // then
+ verify( ps1 ).start();
+ verify( ps2 ).start();
+ }
+
+ @Test
+ public void shouldStartOnRunningPersistenceServices()
+ throws Exception
+ {
+ // given
+ doReturn( true ).when( ps1 ).isRunning();
+ doReturn( true ).when( ps2 ).isRunning();
+
+ // when
+ sut.startAllStoppedPersistenceServices();
+
+ // then
+ verify( ps1, never() ).start();
+ verify( ps2, never() ).start();
+ }
+
+ @Test
+ public void shouldStartOnAllPersistenceServicesEvenInCaseOfException()
+ throws Exception
+ {
+ // given
+ doThrow( new RuntimeException() ).when( ps1 ).start();
+ doThrow( new RuntimeException() ).when( ps2 ).start();
+
+ // when
+ try
+ {
+ sut.startAllStoppedPersistenceServices();
+ }
+
+ // then
+ catch ( AggregatedException e )
+ {
+ verify( ps1 ).start();
+ verify( ps2 ).start();
+ assertThat( e.getNumCauses(), is( 2 ) );
+ return;
+ }
+
+ fail( "must throw AggregatedException" );
+ }
+
+ @Test
+ public void shouldStopOnAllPersistenceServices()
+ throws Exception
+ {
+ // when
+ sut.stopAllRunningPersistenceServices();
+
+ // then
+ verify( ps1 ).stop();
+ verify( ps2 ).stop();
+ }
+
+ @Test
+ public void shouldStopOnAllPersistenceServicesEvenInCaseOfException()
+ throws Exception
+ {
+ // given
+ doThrow( new RuntimeException() ).when( ps1 ).stop();
+ doThrow( new RuntimeException() ).when( ps2 ).stop();
+
+ // when
+ try
+ {
+ sut.stopAllRunningPersistenceServices();
+ }
+
+ // then
+ catch ( AggregatedException e )
+ {
+ verify( ps1 ).stop();
+ verify( ps2 ).stop();
+ assertThat( e.getNumCauses(), is( 2 ) );
+ return;
+ }
+
+ fail( "must throw AggregatedException" );
+ }
+
+ @Test
+ public void shouldBeginOnAllUnitsOfWork()
+ throws Exception
+ {
+ // when
+ sut.beginAllInactiveUnitsOfWork();
+
+ // then
+ verify( uow1 ).begin();
+ verify( uow2 ).begin();
+ }
+
+ @Test
+ public void shouldNotBeginOnActiveUnitsOfWork()
+ throws Exception
+ {
+ // given
+ doReturn( true ).when( uow1 ).isActive();
+ doReturn( true ).when( uow2 ).isActive();
+
+ // when
+ sut.beginAllInactiveUnitsOfWork();
+
+ // then
+ verify( uow1, never() ).begin();
+ verify( uow2, never() ).begin();
+ }
+
+ @Test
+ public void shouldBeginOnAllUnitsOfWorkEvenInCaseOfException()
+ throws Exception
+ {
+ // given
+ doThrow( new RuntimeException() ).when( uow1 ).begin();
+ doThrow( new RuntimeException() ).when( uow2 ).begin();
+
+ // when
+ try
+ {
+ sut.beginAllInactiveUnitsOfWork();
+ }
+
+ // then
+ catch ( AggregatedException e )
+ {
+ verify( uow1 ).begin();
+ verify( uow2 ).begin();
+ assertThat( e.getNumCauses(), is( 2 ) );
+ return;
+ }
+
+ fail( "must throw AggregatedException" );
+ }
+
+ @Test
+ public void shouldEndOnAllUnitsOfWork()
+ throws Exception
+ {
+ // when
+ sut.endAllUnitsOfWork();
+
+ // then
+ verify( uow1 ).end();
+ verify( uow2 ).end();
+ }
+
+ @Test
+ public void shouldEndOnAllUnitsOfWorkEvenInCaseOfException()
+ throws Exception
+ {
+ // given
+ doThrow( new RuntimeException() ).when( uow1 ).end();
+ doThrow( new RuntimeException() ).when( uow2 ).end();
+
+ // when
+ try
+ {
+ sut.endAllUnitsOfWork();
+ }
+
+ // then
+ catch ( AggregatedException e )
+ {
+ verify( uow1 ).end();
+ verify( uow2 ).end();
+ assertThat( e.getNumCauses(), is( 2 ) );
+ return;
+ }
+
+ fail( "must throw AggregatedException" );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PersistenceUnitContainerTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,89 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.*;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.fail;
+
+/**
+ * Test for {@link Preconditions}.
+ */
+public class PreconditionsTest
+{
+
+ private static final String MESSAGE = "test message";
+
+ @Test
+ public void throwing()
+ throws Exception
+ {
+ try
+ {
+ Preconditions.checkNotNull( null );
+ }
+ catch ( NullPointerException e )
+ {
+ assertThat( e.getMessage(), is( nullValue() ) );
+ return;
+ }
+ fail( "expected NullPointerException to be thrown" );
+ }
+
+ @Test
+ public void notThrowing()
+ {
+ final Object input = new Object();
+ final Object result = Preconditions.checkNotNull( input );
+ assertThat( result, sameInstance( input ) );
+ }
+
+ @Test
+ public void throwingWithMessage()
+ throws Exception
+ {
+ try
+ {
+ Preconditions.checkNotNull( null, MESSAGE );
+ }
+ catch ( NullPointerException e )
+ {
+ assertThat( e.getMessage(), is( MESSAGE ) );
+ return;
+ }
+ fail( "expected NullPointerException to be thrown" );
+ }
+
+ @Test
+ public void notThrowingWithMessage()
+ {
+ final Object input = new Object();
+ final Object result = Preconditions.checkNotNull( input, MESSAGE );
+ assertThat( result, sameInstance( input ) );
+ }
+
+ @Test
+ public void canBeCreated()
+ {
+ new Preconditions();
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/PreconditionsTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,146 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import de.bechte.junit.runners.context.HierarchicalContextRunner;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
+import static org.mockito.Mockito.*;
+
+/**
+ * Test for {@link ResourceLocalTransactionFacadeFactory}.
+ */
+@RunWith( HierarchicalContextRunner.class )
+public class ResourceLocalTransactionFacadeProviderTest
+{
+ private ResourceLocalTransactionFacadeFactory sut;
+
+ private EntityManagerProvider emProvider;
+
+ private EntityManager em;
+
+ private EntityTransaction txn;
+
+ @Before
+ public void setUp()
+ {
+ // input
+ emProvider = mock( EntityManagerProvider.class );
+
+ // subject under test
+ sut = new ResourceLocalTransactionFacadeFactory( emProvider );
+
+ // environment
+ em = mock( EntityManager.class );
+ doReturn( em ).when( emProvider ).get();
+
+ txn = mock( EntityTransaction.class );
+ doReturn( txn ).when( em ).getTransaction();
+ }
+
+ public class InnerTransactionTest
+ {
+
+ private TransactionFacade sut;
+
+ @Before
+ public void setUp()
+ {
+ doReturn( true ).when( txn ).isActive();
+ sut = ResourceLocalTransactionFacadeProviderTest.this.sut.createTransactionFacade();
+ }
+
+ @Test
+ public void beginShouldDoNothing()
+ {
+ sut.begin();
+
+ verify( txn, never() ).begin();
+ }
+
+ @Test
+ public void commitShouldDoNothing()
+ {
+ sut.commit();
+
+ verify( txn, never() ).commit();
+ }
+
+ @Test
+ public void rollbackShouldSetRollbackOnlyFlag()
+ {
+ sut.rollback();
+
+ verify( txn ).setRollbackOnly();
+ }
+ }
+
+ public class OuterTransactionTest
+ {
+
+ private TransactionFacade sut;
+
+ @Before
+ public void setUp()
+ {
+ doReturn( false ).when( txn ).isActive();
+ sut = ResourceLocalTransactionFacadeProviderTest.this.sut.createTransactionFacade();
+ }
+
+ @Test
+ public void beginShouldBeginTransaction()
+ {
+ sut.begin();
+
+ verify( txn ).begin();
+ }
+
+ @Test
+ public void commitShouldCommitTransaction()
+ {
+ sut.commit();
+
+ verify( txn ).commit();
+ }
+
+ @Test
+ public void commitShouldRollbackTransactionIfMarkedAsRollbackOnly()
+ {
+ doReturn( true ).when( txn ).getRollbackOnly();
+
+ sut.commit();
+
+ verify( txn ).rollback();
+ }
+
+ @Test
+ public void rollbackShouldRollbackTransaction()
+ {
+ sut.rollback();
+
+ verify( txn ).rollback();
+ }
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/ResourceLocalTransactionFacadeProviderTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,34 @@
+package org.apache.onami.persist;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation for unit tests.
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Target({ ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD })
+public @interface TestPersistenceUnit
+{
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TestPersistenceUnit.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,210 @@
+package org.apache.onami.persist;
+
+import de.bechte.junit.runners.context.HierarchicalContextRunner;
+import org.aopalliance.intercept.MethodInvocation;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.lang.annotation.Annotation;
+import java.security.InvalidParameterException;
+import java.util.IllegalFormatException;
+import java.util.MissingFormatArgumentException;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+
+/**
+ * Test for {@link TransactionalAnnotationHelper}.
+ */
+@RunWith( HierarchicalContextRunner.class )
+public class TransactionalAnnotationHelperTest
+{
+
+ private TransactionalAnnotationHelper sut;
+
+ private TransactionalAnnotationReader txnAnnoReader;
+
+ Class<? extends Annotation> puAnntoation;
+
+ private MethodInvocation invocation;
+
+ private Transactional txnal;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ // input
+ txnAnnoReader = mock( TransactionalAnnotationReader.class );
+
+ // environment
+ invocation = mock( MethodInvocation.class );
+ txnal = mock( Transactional.class );
+
+ doReturn( txnal ).when( txnAnnoReader ).readAnnotationFrom( invocation );
+ }
+
+ public class WithoutPuAnnotation
+ {
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ // input
+ puAnntoation = null;
+
+ // subject under test
+ sut = new TransactionalAnnotationHelper( new AnnotationHolder( puAnntoation ), txnAnnoReader );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsIsNull()
+ {
+ doReturn( null ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsIsEmpty()
+ {
+ doReturn( new Class[]{ } ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsContainsPuAnnotation()
+ {
+ doReturn( new Class[]{ TestPersistenceUnit.class } ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsContainsNotPuAnnotation()
+ {
+ doReturn( new Class[]{ OtherPersistenceUnit.class } ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+ }
+
+ public class WithPuAnnotation
+ {
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ // input
+ puAnntoation = TestPersistenceUnit.class;
+
+ // subject under test
+ sut = new TransactionalAnnotationHelper( new AnnotationHolder( puAnntoation ), txnAnnoReader );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsIsNull()
+ {
+ doReturn( null ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsIsEmpty()
+ {
+ doReturn( new Class[]{ } ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void participatesInTxnWhenUnitsContainsPuAnnotation()
+ {
+ doReturn( new Class[]{ TestPersistenceUnit.class } ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void participatesNotInTxnWhenUnitsContainsNotPuAnnotation()
+ {
+ doReturn( new Class[]{ OtherPersistenceUnit.class } ).when( txnal ).onUnits();
+ final boolean result = sut.persistenceUnitParticipatesInTransactionFor( invocation );
+ assertThat( result, is( false ) );
+ }
+ }
+
+ public class RollbackOnIllegalArgumentExceptionIgnoreIllegalFormatException
+ {
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ // input
+ puAnntoation = null;
+
+ // subject under test
+ sut = new TransactionalAnnotationHelper( new AnnotationHolder( puAnntoation ), txnAnnoReader );
+
+ doReturn( new Class[]{ IllegalArgumentException.class, IllegalStateException.class } )
+ .when( txnal ).rollbackOn();
+ doReturn( new Class[]{ IllegalFormatException.class, NumberFormatException.class } ).when( txnal ).ignore();
+ }
+
+ @Test
+ public void shouldRollbackOnIllegalArgumentException()
+ {
+ Throwable exc = new IllegalArgumentException();
+ final boolean result = sut.isRollbackNecessaryFor( invocation, exc );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void shouldRollbackOnIllegalStateException()
+ {
+ Throwable exc = new IllegalStateException();
+ final boolean result = sut.isRollbackNecessaryFor( invocation, exc );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void shouldRollbackOnInvalidParameterException()
+ {
+ Throwable exc = new InvalidParameterException();
+ final boolean result = sut.isRollbackNecessaryFor( invocation, exc );
+ assertThat( result, is( true ) );
+ }
+
+ @Test
+ public void shouldNotRollbackOnNumberFormatException()
+ {
+ Throwable exc = new NumberFormatException();
+ final boolean result = sut.isRollbackNecessaryFor( invocation, exc );
+ assertThat( result, is( false ) );
+ }
+
+ @Test
+ public void shouldNotRollbackOnMissingFormatArgumentException()
+ {
+ Throwable exc = new MissingFormatArgumentException( "" );
+ final boolean result = sut.isRollbackNecessaryFor( invocation, exc );
+ assertThat( result, is( false ) );
+ }
+
+ @Test
+ public void shouldNotRollbackOnRuntimeException()
+ {
+ Throwable exc = new RuntimeException();
+ final boolean result = sut.isRollbackNecessaryFor( invocation, exc );
+ assertThat( result, is( false ) );
+ }
+
+
+ }
+
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationHelperTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,67 @@
+package org.apache.onami.persist;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+
+import java.lang.annotation.Annotation;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+public final class TransactionalAnnotationMatcher
+ extends BaseMatcher<Transactional>
+{
+ public static TransactionalAnnotationMatcher transactionalAnnotation( Class[] expectedUnits,
+ Class[] expectedRollback,
+ Class[] expectedIgnore )
+ {
+ return new TransactionalAnnotationMatcher( expectedUnits, expectedRollback, expectedIgnore );
+ }
+
+ private final Set<Class> expectedUnits;
+
+ private final Set<Class> expectedRollback;
+
+ private final Set<Class> expectedIgnore;
+
+ private TransactionalAnnotationMatcher( Class[] expectedUnits, Class[] expectedRollback, Class[] expectedIgnore )
+ {
+ this.expectedUnits = asSet( expectedUnits );
+ this.expectedRollback = asSet( expectedRollback );
+ this.expectedIgnore = asSet( expectedIgnore );
+ }
+
+ public boolean matches( Object item )
+ {
+ if ( item instanceof Transactional )
+ {
+ Transactional transactional = (Transactional) item;
+ final Set<Class<? extends Annotation>> actualUnits = asSet( transactional.onUnits() );
+ final Set<Class<? extends Exception>> actualRollback = asSet( transactional.rollbackOn() );
+ final Set<Class<? extends Exception>> actualIgnore = asSet( transactional.ignore() );
+
+ return actualUnits.equals( expectedUnits ) && actualRollback.equals( expectedRollback )
+ && actualIgnore.equals( expectedIgnore );
+ }
+ return false;
+ }
+
+ private <T> Set<T> asSet( T... elements )
+ {
+ if ( elements == null )
+ {
+ return new HashSet<T>();
+ }
+ return new HashSet<T>( Arrays.asList( elements ) );
+ }
+
+ public void describeTo( Description description )
+ {
+ description
+ .appendText( "<@org.apache.onami.persist.Transactional(")
+ .appendText( "onUnits=" ).appendValueList( "[", ", ", "]", expectedUnits )
+ .appendText( ", rollbackOn=" ).appendValueList( "[", ", ", "]", expectedRollback )
+ .appendText( ", ignore=" ).appendValueList( "[", ", ", "]", expectedIgnore )
+ .appendText( ")>" );
+ }
+}
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java
------------------------------------------------------------------------------
svn:keywords = Date Author Id Revision HeadURL
Propchange: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationMatcher.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationReaderTest.java
URL: http://svn.apache.org/viewvc/onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationReaderTest.java?rev=1585487&view=auto
==============================================================================
--- onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationReaderTest.java (added)
+++ onami/sandbox/persist/src/test/java/org/apache/onami/persist/TransactionalAnnotationReaderTest.java Mon Apr 7 14:12:18 2014
@@ -0,0 +1,148 @@
+package org.apache.onami.persist;
+
+import org.aopalliance.intercept.MethodInvocation;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.lang.reflect.AccessibleObject;
+import java.lang.reflect.Method;
+
+/**
+ * Test for {@link TransactionalAnnotationReader}.
+ */
+public class TransactionalAnnotationReaderTest
+{
+ private TransactionalAnnotationReader sut;
+
+ @Before
+ public void setUp()
+ throws Exception
+ {
+ sut = new TransactionalAnnotationReader();
+ }
+
+ @Test
+ public void shouldReadFromMethodWithAnnotation()
+ throws Exception
+ {
+ final MethodInvocation invocation = methodInvocation( new WithMethodAnnotations(), "withAnno" );
+ final Transactional result = sut.readAnnotationFrom( invocation );
+
+ Assert.assertThat( result, TransactionalAnnotationMatcher.transactionalAnnotation(
+ new Class[]{ OtherPersistenceUnit.class }, new Class[]{ NullPointerException.class }, new Class[]{ } ) );
+ }
+
+ @Test
+ public void shouldReadFromClassWithAnnotation()
+ throws Exception
+ {
+ final MethodInvocation invocation = methodInvocation( new WithClassAnnotations(), "noAnno" );
+ final Transactional result = sut.readAnnotationFrom( invocation );
+
+ Assert.assertThat( result, TransactionalAnnotationMatcher.transactionalAnnotation(
+ new Class[]{ TestPersistenceUnit.class }, new Class[]{ IllegalArgumentException.class }, new Class[]{ } ) );
+ }
+
+ @Test
+ public void shouldReadFromDefaultsClassAndMethodWithoutAnnotation()
+ throws Exception
+ {
+ final MethodInvocation invocation = methodInvocation( new WithoutAnyAnnotations(), "noAnno" );
+ final Transactional result = sut.readAnnotationFrom( invocation );
+
+ Assert.assertThat( result, TransactionalAnnotationMatcher.transactionalAnnotation( new Class[]{ }, new Class[]{
+ RuntimeException.class }, new Class[]{ } ) );
+ }
+
+ @Test
+ public void shouldReadFromMethodWithAnnotationWhenBothClassAndMethodAnnotationAreGiven()
+ throws Exception
+ {
+ final MethodInvocation invocation = methodInvocation( new WithClassAndMethodAnnotations(), "withAnno" );
+ final Transactional result = sut.readAnnotationFrom( invocation );
+
+ Assert.assertThat( result, TransactionalAnnotationMatcher.transactionalAnnotation(
+ new Class[]{ OtherPersistenceUnit.class }, new Class[]{ NullPointerException.class }, new Class[]{ } ) );
+ }
+
+ // classes and methods to pass to the TransactionalAnnotationReader for testing
+
+ private static class WithoutAnyAnnotations
+ {
+ public void noAnno()
+ {
+ // nop
+ }
+ }
+
+ @Transactional( onUnits = TestPersistenceUnit.class, rollbackOn = IllegalArgumentException.class )
+ private static class WithClassAnnotations
+ {
+ public void noAnno()
+ {
+ // nop
+ }
+ }
+
+ private static class WithMethodAnnotations
+ {
+ @Transactional( onUnits = OtherPersistenceUnit.class, rollbackOn = NullPointerException.class )
+ public void withAnno()
+ {
+ // nop
+ }
+ }
+
+ @Transactional( onUnits = TestPersistenceUnit.class, rollbackOn = IllegalArgumentException.class )
+ private static class WithClassAndMethodAnnotations
+ {
+ @Transactional( onUnits = OtherPersistenceUnit.class, rollbackOn = NullPointerException.class )
+ public void withAnno()
+ {
+ // nop
+ }
+ }
+
+
+ private static MethodInvocation methodInvocation( final Object instance, String name )
+ {
+ try
+ {
+ final Method method = instance.getClass().getDeclaredMethod( name );
+ return new MethodInvocation()
+ {
+ public Method getMethod()
+ {
+ return method;
+ }
+
+ public Object[] getArguments()
+ {
+ throw new RuntimeException( "not implemented in mock" );
+ }
+
+ public Object proceed()
+ throws Throwable
+ {
+ throw new RuntimeException( "not implemented in mock" );
+ }
+
+ public Object getThis()
+ {
+ return instance;
+ }
+
+ public AccessibleObject getStaticPart()
+ {
+ throw new RuntimeException( "not implemented in mock" );
+ }
+ };
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ throw new RuntimeException( e );
+ }
+ }
+}