package vnet.sms.gateway.server.framework; import static org.junit.Assert.assertTrue; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.ObjectMessage; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import vnet.sms.common.messages.LoginRequest; import vnet.sms.common.messages.Msisdn; import vnet.sms.common.messages.Sms; import vnet.sms.gateway.server.framework.test.ForwardingJmsMessageListener; import vnet.sms.gateway.server.framework.test.IntegrationTestClient; import vnet.sms.gateway.server.framework.test.JmsMessagePredicate; @RunWith(SpringJUnit4ClassRunner.class) @ActiveProfiles("itest") @DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_CLASS) @ContextConfiguration({ "classpath:META-INF/services/gateway-server-application-context.xml", "classpath:META-INF/services/gateway-server-authentication-manager-context.xml", "classpath:META-INF/services/gateway-server-jms-client-context.xml", "classpath:META-INF/services/gateway-server-shell-context.xml", "classpath*:META-INF/module/module-context.xml", "classpath:META-INF/itest/itest-gateway-server-embedded-activemq-broker-context.xml", "classpath:META-INF/itest/itest-serialization-transport-plugin-context.xml", "classpath:META-INF/itest/itest-test-client-context.xml", "classpath:META-INF/itest/itest-test-jms-listener-context.xml", "classpath:META-INF/itest/itest-gateway-server-description-context.xml" }) public class ReceiveIncomingMtSmsIT { @Autowired private IntegrationTestClient testClient; @Autowired private ForwardingJmsMessageListener incomingMessagesListener; @Test public final void assertThatGatewayServerForwardsReceivedMtSmsToJmsServer() throws Throwable { this.testClient.connect(); final int loginReference = 1; final String username = "assertThatGatewayServerForwardsReceivedMtSmsToJmsServer"; final LoginRequest successfulLoginRequest = new LoginRequest(username, "whatever"); this.testClient.sendMessageAndWaitForResponse(loginReference, successfulLoginRequest); final int smsReference = 2; final Sms mtSms = new Sms(new Msisdn("01686754432"), new Msisdn( "01686754432"), "assertThatGatewayServerForwardsReceivedMtSmsToJmsServer"); final JmsMessagePredicate isExpectedSms = new JmsMessagePredicate() { @Override public boolean evaluate(final Message msg) { try { if (!(msg instanceof ObjectMessage)) { return false; } final ObjectMessage omsg = ObjectMessage.class.cast(msg); final Object payload = omsg.getObject(); return (payload instanceof Sms); } catch (final JMSException e) { throw new RuntimeException(e); } } }; final CountDownLatch expectedSmsDelivered = this.incomingMessagesListener .awaitMatchingMessage(isExpectedSms); this.testClient.sendMessage(smsReference, mtSms); this.testClient.disconnect(); assertTrue("GatewayServer should have forwarded MT SMS to JMS server", expectedSmsDelivered.await(2, TimeUnit.SECONDS)); } }