package com.comcast.cns.test.unit;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.util.ArrayList;
import java.util.Arrays;
import org.junit.Test;
import com.amazonaws.services.sns.model.MessageAttributeValue;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.SetSubscriptionAttributesRequest;
import com.amazonaws.services.sns.model.SubscribeRequest;
import com.amazonaws.services.sns.model.SubscribeResult;
import com.amazonaws.services.sqs.model.DeleteMessageRequest;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.ReceiveMessageResult;
import com.comcast.cmb.test.tools.CMBAWSBaseTest;
public class CNSPublishToCQSWithAttributes extends CMBAWSBaseTest {
@Test
public void TestPublishToCQSWithAttributes() {
try {
String queueUrl = getQueueUrl(0, USR.USER1);
String topicArn = getTopic(0, USR.USER1);
Thread.sleep(1000);
long subscribeFailures = 0;
try {
SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, "cqs", com.comcast.cqs.util.Util.getArnForAbsoluteQueueUrl(queueUrl));
SubscribeResult subscribeResult = cns1.subscribe(subscribeRequest);
logger.info("subscribed queue to topic " + queueUrl);
SetSubscriptionAttributesRequest setSubscriptionAttributesRequest = new SetSubscriptionAttributesRequest(subscribeResult.getSubscriptionArn(), "RawMessageDelivery", "true");
cns1.setSubscriptionAttributes(setSubscriptionAttributesRequest);
} catch (Exception ex) {
logger.error("subscribe failure", ex);
subscribeFailures++;
}
Thread.sleep(1000);
try {
PublishRequest publishRequest = new PublishRequest(topicArn, "test message");
MessageAttributeValue value = new MessageAttributeValue();
value.setDataType("String");
value.setStringValue("abc");
publishRequest.addMessageAttributesEntry("mystring", value);
cns1.publish(publishRequest);
logger.info("published message on topic " + topicArn);
} catch (Exception ex) {
logger.error("publish failure", ex);
}
Thread.sleep(1000);
long messageCount = 0;
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
receiveMessageRequest.setQueueUrl(queueUrl);
receiveMessageRequest.setMaxNumberOfMessages(1);
receiveMessageRequest.setMessageAttributeNames(new ArrayList<String>(Arrays.asList("All")));
ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);
messageCount = receiveMessageResult.getMessages().size();
logger.info(messageCount + " found message in queue " + queueUrl);
for (Message message : receiveMessageResult.getMessages()) {
assertTrue("wrong message content " + message.getBody(), message.getBody().equals("test message"));
assertTrue("wrong number of message attributes " + message.getMessageAttributes().size(), message.getMessageAttributes().size() == 1);
assertTrue("message attribute is null", message.getMessageAttributes().containsKey("mystring"));
assertTrue("message attribute has wrong value " + message.getMessageAttributes().get("mystring"), message.getMessageAttributes().get("mystring").getStringValue().equals("abc"));
DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest();
deleteMessageRequest.setQueueUrl(queueUrl);
deleteMessageRequest.setReceiptHandle(message.getReceiptHandle());
cqs1.deleteMessage(deleteMessageRequest);
}
logger.info("subscribe failures: " + subscribeFailures + " messages found: " + messageCount);
assertTrue("Subscribe failures: " + subscribeFailures, subscribeFailures == 0);
assertTrue("Wrong number of messages found: " + messageCount, messageCount == 1);
} catch (Exception ex) {
logger.error("test failed", ex);
fail(ex.getMessage());
}
}
}