/**
* Copyright (c) 2009 - 2012 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package org.candlepin.audit;
import static org.mockito.Matchers.*;
import static org.mockito.Mockito.*;
import org.candlepin.auth.PrincipalData;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.hornetq.api.core.HornetQBuffer;
import org.hornetq.api.core.HornetQBuffers;
import org.hornetq.api.core.HornetQException;
import org.hornetq.api.core.HornetQExceptionType;
import org.hornetq.api.core.client.ClientMessage;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import java.io.StringWriter;
/**
* ListenerWrapperTest
*/
@RunWith(MockitoJUnitRunner.class)
public class ListenerWrapperTest {
@Mock private EventListener mockEventListener;
@Mock private ClientMessage mockClientMessage;
@Spy private ObjectMapper mapper = new ObjectMapper();
@Spy private HornetQBuffer hornetQBuffer = HornetQBuffers.fixedBuffer(1000);
private ListenerWrapper listenerWrapper;
@Before
public void init() {
this.listenerWrapper = new ListenerWrapper(mockEventListener, mapper);
when(mockClientMessage.getBodyBuffer())
.thenReturn(hornetQBuffer);
}
@Test(expected = RuntimeException.class)
public void whenMapperReadThrowsExceptionThenOnMessageShouldFail() throws Exception {
doReturn("test123").when(hornetQBuffer).readString();
doThrow(new JsonMappingException("Induced exception"))
.when(mapper).readValue(anyString(), eq(Event.class));
this.listenerWrapper.onMessage(mockClientMessage);
}
@Test
public void whenMsgAcknowledgeThrowsExceptionThenOnMessageShouldntFail()
throws Exception {
doReturn(eventJson()).when(hornetQBuffer).readString();
doThrow(new HornetQException(HornetQExceptionType.DISCONNECTED,
"Induced exception for junit testing"))
.when(mockClientMessage).acknowledge();
this.listenerWrapper.onMessage(mockClientMessage);
verify(this.mockEventListener).onEvent(any(Event.class));
}
@Test
public void whenProperClientMsgPassedThenOnMessageShouldSucceed()
throws Exception {
doReturn(eventJson()).when(hornetQBuffer).readString();
this.listenerWrapper.onMessage(mockClientMessage);
verify(this.mockEventListener).onEvent(any(Event.class));
verify(this.mockClientMessage).acknowledge();
}
@Test(expected = NullPointerException.class)
public void onMessageNull() {
this.listenerWrapper.onMessage(null);
}
private String eventJson() throws Exception {
StringWriter sw = new StringWriter();
Event e = new Event();
e.setId("10");
e.setConsumerId("20");
e.setPrincipal(new PrincipalData("5678", "910112"));
mapper.writeValue(sw, e);
return sw.toString();
}
}