/** * Copyright 2008 The University of North Carolina at Chapel Hill * * Licensed 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. */ package edu.unc.lib.dl.fedora; import static org.mockito.Matchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import static org.mockito.MockitoAnnotations.initMocks; import java.io.InputStream; import javax.jms.Message; import javax.jms.TextMessage; import org.apache.commons.io.IOUtils; import org.jdom2.Document; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; /** * @author bbpennel * @date Mar 18, 2014 */ public class JobForwardingJMSListenerTest { @Mock private TextMessage msg; @Mock private ListenerJob job1; @Mock private ListenerJob job2; private JobForwardingJMSListener listener; @Before public void setup() throws Exception { initMocks(this); listener = new JobForwardingJMSListener(); InputStream inStream = this.getClass().getResourceAsStream("/ingestMessage.xml"); String messageBody = IOUtils.toString(inStream); when(msg.getText()).thenReturn(messageBody); } @Test public void testOnMessageNoListeners() throws Exception { listener.onMessage(msg); verify(msg, never()).getText(); } @Test public void testOnMessage() throws Exception { listener.registerListener(job1); listener.registerListener(job2); listener.onMessage(msg); verify(msg).getText(); verify(job1).onEvent(any(Document.class)); verify(job2).onEvent(any(Document.class)); } @Test public void testOnMessageUnregister() throws Exception { listener.registerListener(job1); listener.unregisterListener(job1); listener.onMessage(msg); verify(msg, never()).getText(); verify(job1, never()).onEvent(any(Document.class)); } @Test public void testOnMessageUnregisterMultipleMessages() throws Exception { listener.registerListener(job1); listener.registerListener(job2); listener.onMessage(msg); listener.unregisterListener(job1); listener.onMessage(msg); verify(msg, times(2)).getText(); verify(job1).onEvent(any(Document.class)); verify(job2, times(2)).onEvent(any(Document.class)); } @Test(expected = IllegalArgumentException.class) public void testOnMessageNotText() throws Exception { listener.registerListener(job1); Message badMessage = mock(Message.class); try { listener.onMessage(badMessage); } finally { verify(job1, never()).onEvent(any(Document.class)); } } }