/basic-queue-core/src/test/java/eu/melw/queues/aws/SQSServiceTest.java

https://bitbucket.org/melw/simple-sqs · Java · 163 lines · 131 code · 32 blank · 0 comment · 0 complexity · 13f5e93fb188d338219c185fb294fe22 MD5 · raw file

  1. package eu.melw.queues.aws;
  2. import com.amazonaws.AmazonClientException;
  3. import com.amazonaws.AmazonServiceException;
  4. import com.amazonaws.auth.AWSCredentials;
  5. import com.amazonaws.auth.AWSCredentialsProvider;
  6. import com.amazonaws.services.sqs.AmazonSQS;
  7. import com.amazonaws.services.sqs.model.*;
  8. import eu.melw.queues.message.MessageValidator;
  9. import eu.melw.queues.message.MessengerException;
  10. import eu.melw.queues.message.PermitDeleteValidator;
  11. import eu.melw.queues.support.*;
  12. import org.junit.Before;
  13. import org.junit.Rule;
  14. import org.junit.Test;
  15. import org.junit.rules.ExpectedException;
  16. import org.junit.runner.RunWith;
  17. import org.mockito.Mock;
  18. import org.mockito.runners.MockitoJUnitRunner;
  19. import java.util.Arrays;
  20. import java.util.List;
  21. import static org.junit.Assert.assertEquals;
  22. import static org.mockito.Mockito.*;
  23. @RunWith(MockitoJUnitRunner.class)
  24. public class SQSServiceTest {
  25. @Mock
  26. private SendMessageResult sendMessageResult;
  27. @Mock
  28. private MessageValidator messageValidator;
  29. @Mock
  30. private Message message;
  31. @Mock
  32. private ReceiveMessageResult receiveMessageResult;
  33. @Mock
  34. private CreateQueueResult createQueueResult;
  35. @Mock
  36. private AmazonSQS sqsClient;
  37. TaskMessage taskMessage;
  38. TaskMessageMarshaller marshaller = DefaultTaskMessageMarshallerFactory.getInstance()
  39. .getMarshaller(DefaultTaskMessageMarshallerFactory.YAML);
  40. private SQSService sqs;
  41. @Rule
  42. public ExpectedException exception = ExpectedException.none();
  43. private static final String ANY_ENDPOINT = "endPoint";
  44. private static final String ANY_QUEUE_URL = "url";
  45. private static final String MESSAGE_ID = "message-id";
  46. private static final QueueProperties VALID_QUEUE_PROPERTIES =
  47. new QueueProperties(ANY_ENDPOINT,ANY_QUEUE_URL, DefaultTaskMessageMarshallerFactory.YAML);
  48. @Before
  49. public void setUp() {
  50. taskMessage = TaskMessage.create("test-message", "body");
  51. sqs = new SQSService(new FakeSQSClientFactory(),
  52. DefaultTaskMessageMarshallerFactory.getInstance(),
  53. new PermitDeleteValidator(),
  54. 10,
  55. 10);
  56. }
  57. @Test
  58. public void
  59. sendsMessageSuccessFully() throws Exception {
  60. SendMessageResult smr = mock(SendMessageResult.class);
  61. when(sendMessageResult.getMessageId()).thenReturn(MESSAGE_ID);
  62. when(sqsClient.sendMessage(any(SendMessageRequest.class))).thenReturn(sendMessageResult);
  63. TaskMessage tm = sqs.sendMessage(VALID_QUEUE_PROPERTIES,taskMessage);
  64. assertEquals(MESSAGE_ID, tm.getMessageId());
  65. }
  66. @Test(expected = MessengerException.class)
  67. public void
  68. throwsExceptionOnSendMessage() {
  69. when(sqsClient.sendMessage(any(SendMessageRequest.class)))
  70. .thenThrow(new AmazonServiceException("a"));
  71. sqs.sendMessage(VALID_QUEUE_PROPERTIES, taskMessage);
  72. }
  73. @Test
  74. public void
  75. receivesOneMessage() {
  76. when(message.getMessageId())
  77. .thenReturn(MESSAGE_ID);
  78. when(message.getBody())
  79. .thenReturn(marshaller.marshall(taskMessage));
  80. when(receiveMessageResult.getMessages())
  81. .thenReturn(Arrays.asList(message));
  82. when(sqsClient.receiveMessage(any(ReceiveMessageRequest.class)))
  83. .thenReturn(receiveMessageResult);
  84. QueueProperties qp = new QueueProperties(ANY_ENDPOINT,
  85. ANY_QUEUE_URL,
  86. DefaultTaskMessageMarshallerFactory.YAML);
  87. List<TaskMessage> messages = sqs.receiveMessages(qp);
  88. assertEquals(1, messages.size());
  89. }
  90. @Test
  91. public void
  92. createQueue() {
  93. when(createQueueResult.getQueueUrl())
  94. .thenReturn(ANY_QUEUE_URL);
  95. when(sqsClient.createQueue(any(CreateQueueRequest.class)))
  96. .thenReturn(createQueueResult);
  97. String target = sqs.createQueue("endPoint", "queueName");
  98. assertEquals(ANY_QUEUE_URL, target);
  99. }
  100. @Test(expected = QueueManagementException.class)
  101. public void createQueueThrowAmazonClientException() {
  102. when(sqsClient.createQueue(any(CreateQueueRequest.class)))
  103. .thenThrow(new AmazonClientException(""));
  104. String target = sqs.createQueue("endPoint", "queueName");
  105. assertEquals(ANY_QUEUE_URL, target);
  106. }
  107. static class FakeCredentialsSupplier implements AWSCredentialsProvider {
  108. @Override
  109. public AWSCredentials getCredentials() {
  110. return new AWSCredentials() {
  111. @Override
  112. public String getAWSAccessKeyId() {
  113. return "access-key";
  114. }
  115. @Override
  116. public String getAWSSecretKey() {
  117. return "secret-key";
  118. }
  119. };
  120. }
  121. @Override
  122. public void refresh() {
  123. }
  124. }
  125. class FakeSQSClientFactory implements SQSService.SQSClientFactory {
  126. @Override
  127. public AmazonSQS getClient(String endPoint) {
  128. return sqsClient;
  129. }
  130. }
  131. }