package vnet.sms.gateway.nettysupport;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.MDC;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import vnet.sms.common.messages.GsmPdu;
import vnet.sms.common.messages.LoginRequest;
public class MessageProcessingContextTest {
@Before
public void clearMdcBefore() {
MDC.clear();
}
@After
public void clearMdcAfter() {
MDC.clear();
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatOnUserEnterRejectsNullUser() {
MessageProcessingContext.INSTANCE.onUserEnter(null);
}
@Test(expected = IllegalStateException.class)
public final void assertThatOnUserEnterRejectsToAssociateAUserMoreThanOnce() {
final Authentication user = new UsernamePasswordAuthenticationToken(
"assertThatOnUserEnterRejectsToAssociateAUserMoreThanOnce",
"secret");
MessageProcessingContext.INSTANCE.onUserEnter(user);
MessageProcessingContext.INSTANCE.onUserEnter(user);
}
@Test
public final void assertThatOnUserEnterStoresCurrentUserInMDC() {
final Authentication user = new UsernamePasswordAuthenticationToken(
"assertThatOnUserEnterStoresCurrentUserInMDC", "secret");
MessageProcessingContext.INSTANCE.onUserEnter(user);
assertEquals("onUserEnter(" + user
+ ") should have stored our current user in our MDC",
user.getName(),
MDC.get(MessageProcessingContext.CURRENT_USER_MDC_KEY));
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatOnUserExitRejectsNullUser() {
MessageProcessingContext.INSTANCE.onUserExit(null);
}
@Test(expected = IllegalStateException.class)
public final void assertThatOnUserExitRejectsToDisassociateAUserThatHasNotBeenAssociatedBefore() {
final Authentication user = new UsernamePasswordAuthenticationToken(
"assertThatOnUserExitRejectsToDisassociateAUserThatHasNotBeenAssociatedBefore",
"secret");
MessageProcessingContext.INSTANCE.onUserExit(user);
}
@Test
public final void assertThatOnUserExitRemovesCurrentUserFromMDC() {
final Authentication user = new UsernamePasswordAuthenticationToken(
"assertThatOnUserExitRemovesCurrentUserFromMDC", "secret");
MessageProcessingContext.INSTANCE.onUserEnter(user);
MessageProcessingContext.INSTANCE.onUserExit(user);
assertNull("onUserExit(" + user
+ ") should have removed current user from MDC",
MDC.get(MessageProcessingContext.CURRENT_USER_MDC_KEY));
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatOnMessageEnterRejectsNullMessage() {
MessageProcessingContext.INSTANCE.onMessageEnter(null);
}
@Test(expected = IllegalStateException.class)
public final void assertThatOnMessageEnterRejectsToAssociateAMessageMoreThanOnce() {
final GsmPdu message = new LoginRequest(
"assertThatOnMessageEnterRejectsToAssociateAMessageMoreThanOnce",
"secret");
MessageProcessingContext.INSTANCE.onMessageEnter(message);
MessageProcessingContext.INSTANCE.onMessageEnter(message);
}
@Test
public final void assertThatOnMessageEnterStoresCurrentMessageInMDC() {
final GsmPdu message = new LoginRequest(
"assertThatOnMessageEnterRejectsToAssociateAMessageMoreThanOnce",
"secret");
MessageProcessingContext.INSTANCE.onMessageEnter(message);
assertEquals("onMessageEnter(" + message
+ ") should have stored our current message's UUID in our MDC",
message.getId().toString(),
MDC.get(MessageProcessingContext.MESSAGE_UUID_MDC_KEY));
}
@Test(expected = IllegalArgumentException.class)
public final void assertThatOnMessageExitRejectsNullMessage() {
MessageProcessingContext.INSTANCE.onMessageExit(null);
}
@Test(expected = IllegalStateException.class)
public final void assertThatOnMessageExitRejectsToDisassociateAMessageThatHasNotBeenAssociatedBefore() {
final GsmPdu message = new LoginRequest(
"assertThatOnMessageExitRejectsToDisassociateAMessageThatHasNotBeenAssociatedBefore",
"secret");
MessageProcessingContext.INSTANCE.onMessageExit(message);
}
@Test
public final void assertThatOnMessageExitRemovesCurrentMessageFromMDC() {
final GsmPdu message = new LoginRequest(
"assertThatOnMessageExitRemovesCurrentMessageFromMDC", "secret");
MessageProcessingContext.INSTANCE.onMessageEnter(message);
MessageProcessingContext.INSTANCE.onMessageExit(message);
assertNull("onMessageExit(" + message
+ ") should have removed current message from MDC",
MDC.get(MessageProcessingContext.MESSAGE_UUID_MDC_KEY));
}
}