/**
* Copyright 2012 Comcast Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.comcast.cns.test.unit;
import static org.junit.Assert.*;
import java.util.Arrays;
import org.json.JSONObject;
import org.junit.Test;
import com.amazonaws.services.sns.model.AddPermissionRequest;
import com.amazonaws.services.sns.model.GetSubscriptionAttributesRequest;
import com.amazonaws.services.sns.model.GetSubscriptionAttributesResult;
import com.amazonaws.services.sns.model.SetSubscriptionAttributesRequest;
import com.amazonaws.services.sns.model.SetTopicAttributesRequest;
import com.amazonaws.services.sns.model.SubscribeRequest;
import com.comcast.cmb.common.util.XmlUtil;
import com.comcast.cmb.test.tools.CMBAWSBaseTest;
import com.comcast.cmb.test.tools.CMBTestingConstants;
import com.comcast.cmb.test.tools.CNSTestingUtils;
public class CNSSubscriptionAttributeCMBTest extends CMBAWSBaseTest {
@Test
public void testGetAttributes() {
try {
String topicArn = getTopic(1, USR.USER1);
String endpoint = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + rand.nextInt();
SubscribeRequest subscribeRequest = new SubscribeRequest();
subscribeRequest.setEndpoint(endpoint);
subscribeRequest.setProtocol("http");
subscribeRequest.setTopicArn(topicArn);
String subscriptionArn = cns1.subscribe(subscribeRequest).getSubscriptionArn();
String lastMessageUrl = endpoint.replace("recv", "info") + "?showLast=true";
if (subscriptionArn.equals("pending confirmation")) {
String resp = CNSTestingUtils.sendHttpMessage(lastMessageUrl, "");
JSONObject o = new JSONObject(resp);
if (!o.has("SubscribeURL")) {
fail("Message is not a confirmation messsage");
}
String subscriptionUrl = o.getString("SubscribeURL");
resp = CNSTestingUtils.sendHttpMessage(subscriptionUrl, "");
logger.info(resp);
subscriptionArn = XmlUtil.getCurrentLevelTextValue(XmlUtil.getChildNodes(XmlUtil.buildDoc(resp)).get(0), "SubscriptionArn");
}
GetSubscriptionAttributesResult result = cns1.getSubscriptionAttributes(new GetSubscriptionAttributesRequest(subscriptionArn));
JSONObject effectiveDeliveryPolicy = new JSONObject(result.getAttributes().get("EffectiveDeliveryPolicy"));
assertTrue(effectiveDeliveryPolicy.has("healthyRetryPolicy"));
JSONObject healthyRetryPolicy = effectiveDeliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPolicy != null);
assertTrue(healthyRetryPolicy.getInt("numRetries") == 3);
assertTrue(healthyRetryPolicy.getInt("maxDelayTarget") == 20);
assertTrue(healthyRetryPolicy.getInt("minDelayTarget") == 20);
assertTrue(healthyRetryPolicy.getInt("numMaxDelayRetries") == 0);
assertTrue(healthyRetryPolicy.getString("backoffFunction").equals("linear"));
assertTrue(healthyRetryPolicy.getInt("numMinDelayRetries") == 0);
assertTrue(healthyRetryPolicy.getInt("numNoDelayRetries") == 0);
assertTrue(effectiveDeliveryPolicy.has("sicklyRetryPolicy"));
assertTrue(effectiveDeliveryPolicy.get("sicklyRetryPolicy") == JSONObject.NULL);
assertTrue(effectiveDeliveryPolicy.has("throttlePolicy"));
JSONObject throttlePolicy = effectiveDeliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.get("maxReceivesPerSecond") == JSONObject.NULL);
assertTrue(result.getAttributes().get("ConfirmationWasAuthenticated").equals("false"));
assertTrue(result.getAttributes().get("TopicArn").equals(topicArn));
assertTrue(result.getAttributes().get("SubscriptionArn").equals(subscriptionArn));
} catch (Exception ex) {
logger.error("test failed", ex);
fail(ex.getMessage());
}
}
@Test
public void testSetGetAttributes() {
try {
String topicArn = getTopic(1, USR.USER1);
String endpoint = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + rand.nextInt();
SubscribeRequest subscribeRequest = new SubscribeRequest();
subscribeRequest.setEndpoint(endpoint);
subscribeRequest.setProtocol("http");
subscribeRequest.setTopicArn(topicArn);
String subscriptionArn = cns1.subscribe(subscribeRequest).getSubscriptionArn();
String lastMessageUrl = endpoint.replace("recv", "info") + "?showLast=true";
if (subscriptionArn.equals("pending confirmation")) {
String resp = CNSTestingUtils.sendHttpMessage(lastMessageUrl, "");
JSONObject o = new JSONObject(resp);
if (!o.has("SubscribeURL")) {
fail("Message is not a confirmation messsage");
}
String subscriptionUrl = o.getString("SubscribeURL");
resp = CNSTestingUtils.sendHttpMessage(subscriptionUrl, "");
logger.info(resp);
subscriptionArn = XmlUtil.getCurrentLevelTextValue(XmlUtil.getChildNodes(XmlUtil.buildDoc(resp)).get(0), "SubscriptionArn");
}
String attributeName = "DeliveryPolicy";
String attributeValue = "{\"healthyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":12,"+
"\"maxDelayTarget\":13,"+
"\"numRetries\":43,"+
"\"numMaxDelayRetries\": 23,"+
"\"numMinDelayRetries\": 20,"+
"\"backoffFunction\": \"arithmetic\""+
"}," +
"\"throttlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":7" +
"}," +
"\"sicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":15,"+
"\"numMinDelayRetries\": 4,"+
"\"numMaxDelayRetries\": 5,"+
"\"numNoDelayRetries\":6,"+
"\"backoffFunction\": \"exponential\""+
"}" +
"}";
cns1.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn, attributeName, attributeValue));
GetSubscriptionAttributesResult result = cns1.getSubscriptionAttributes(new GetSubscriptionAttributesRequest(subscriptionArn));
JSONObject effectiveDeliveryPolicy = new JSONObject(result.getAttributes().get("EffectiveDeliveryPolicy"));
assertTrue(effectiveDeliveryPolicy.has("healthyRetryPolicy"));
JSONObject healthyRetryPoliocy = effectiveDeliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPoliocy != null);
assertTrue(healthyRetryPoliocy.getInt("numRetries") == 43);
assertTrue(healthyRetryPoliocy.getInt("minDelayTarget") == 12);
assertTrue(healthyRetryPoliocy.getInt("maxDelayTarget") == 13);
assertTrue(healthyRetryPoliocy.getInt("numMinDelayRetries") == 20);
assertTrue(healthyRetryPoliocy.getInt("numMaxDelayRetries") == 23);
assertTrue(healthyRetryPoliocy.getInt("numNoDelayRetries") == 0);
assertTrue(healthyRetryPoliocy.getString("backoffFunction").equals("arithmetic"));
assertTrue(effectiveDeliveryPolicy.has("sicklyRetryPolicy"));
JSONObject sicklyRetryPolicy = effectiveDeliveryPolicy.getJSONObject("sicklyRetryPolicy");
assertTrue(sicklyRetryPolicy != null);
assertTrue(sicklyRetryPolicy.getInt("numRetries") == 15);
assertTrue(sicklyRetryPolicy.getInt("minDelayTarget") == 2);
assertTrue(sicklyRetryPolicy.getInt("maxDelayTarget") == 3);
assertTrue(sicklyRetryPolicy.getInt("numMinDelayRetries") == 4);
assertTrue(sicklyRetryPolicy.getInt("numMaxDelayRetries") == 5);
assertTrue(sicklyRetryPolicy.getInt("numNoDelayRetries") == 6);
assertTrue(sicklyRetryPolicy.getString("backoffFunction").equals("exponential"));
assertTrue(effectiveDeliveryPolicy.has("throttlePolicy"));
JSONObject throttlePolicy = effectiveDeliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.getInt("maxReceivesPerSecond") == 7);
assertTrue(result.getAttributes().get("ConfirmationWasAuthenticated").equals("false"));
JSONObject deliveryPolicy = new JSONObject(result.getAttributes().get("DeliveryPolicy"));
assertTrue(deliveryPolicy.has("healthyRetryPolicy"));
JSONObject healthyRetryPolicy = deliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPolicy != null);
assertTrue(healthyRetryPolicy.getInt("numRetries") == 43);
assertTrue(healthyRetryPolicy.getInt("minDelayTarget") == 12);
assertTrue(healthyRetryPolicy.getInt("maxDelayTarget") == 13);
assertTrue(healthyRetryPolicy.getInt("numMinDelayRetries") == 20);
assertTrue(healthyRetryPolicy.getInt("numMaxDelayRetries") == 23);
assertTrue(healthyRetryPolicy.getInt("numNoDelayRetries") == 0);
assertTrue(healthyRetryPolicy.getString("backoffFunction").equals("arithmetic"));
assertTrue(deliveryPolicy.has("sicklyRetryPolicy"));
assertTrue(deliveryPolicy.has("throttlePolicy"));
throttlePolicy = deliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.getInt("maxReceivesPerSecond") == 7);
sicklyRetryPolicy = deliveryPolicy.getJSONObject("sicklyRetryPolicy");
assertTrue(sicklyRetryPolicy != null);
assertTrue(sicklyRetryPolicy.getInt("numRetries") == 15);
assertTrue(sicklyRetryPolicy.getInt("minDelayTarget") == 2);
assertTrue(sicklyRetryPolicy.getInt("maxDelayTarget") == 3);
assertTrue(sicklyRetryPolicy.getInt("numMinDelayRetries") == 4);
assertTrue(sicklyRetryPolicy.getInt("numMaxDelayRetries") == 5);
assertTrue(sicklyRetryPolicy.getInt("numNoDelayRetries") == 6);
assertTrue(sicklyRetryPolicy.getString("backoffFunction").equals("exponential"));
assertTrue(result.getAttributes().get("TopicArn").equals(topicArn));
assertTrue(result.getAttributes().get("SubscriptionArn").equals(subscriptionArn));
} catch (Exception e) {
logger.error("test failed", e);
fail(e.getMessage());
}
}
@Test
public void testSetGetAttributesWithPermissions() {
try {
String topicArn = getTopic(1, USR.USER1);
cns1.addPermission(new AddPermissionRequest(topicArn, "p1", Arrays.asList("*") , Arrays.asList("*")));
String endpoint = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + rand.nextInt();
SubscribeRequest subscribeRequest = new SubscribeRequest();
subscribeRequest.setEndpoint(endpoint);
subscribeRequest.setProtocol("http");
subscribeRequest.setTopicArn(topicArn);
String subscriptionArn1 = cns2.subscribe(subscribeRequest).getSubscriptionArn();
String lastMessageUrl = endpoint.replace("recv", "info") + "?showLast=true";
if (subscriptionArn1.equals("pending confirmation")) {
String resp = CNSTestingUtils.sendHttpMessage(lastMessageUrl, "");
JSONObject o = new JSONObject(resp);
if (!o.has("SubscribeURL")) {
fail("Message is not a confirmation messsage");
}
String subscriptionUrl = o.getString("SubscribeURL");
resp = CNSTestingUtils.sendHttpMessage(subscriptionUrl, "");
logger.info(resp);
subscriptionArn1 = XmlUtil.getCurrentLevelTextValue(XmlUtil.getChildNodes(XmlUtil.buildDoc(resp)).get(0), "SubscriptionArn");
}
endpoint = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + rand.nextInt();
subscribeRequest = new SubscribeRequest();
subscribeRequest.setEndpoint(endpoint);
subscribeRequest.setProtocol("http");
subscribeRequest.setTopicArn(topicArn);
String subscriptionArn2 = cns2.subscribe(subscribeRequest).getSubscriptionArn();
lastMessageUrl = endpoint.replace("recv", "info") + "?showLast=true";
if (subscriptionArn2.equals("pending confirmation")) {
String resp = CNSTestingUtils.sendHttpMessage(lastMessageUrl, "");
JSONObject o = new JSONObject(resp);
if (!o.has("SubscribeURL")) {
fail("Message is not a confirmation messsage");
}
String subscriptionUrl = o.getString("SubscribeURL");
resp = CNSTestingUtils.sendHttpMessage(subscriptionUrl, "");
logger.info(resp);
subscriptionArn2 = XmlUtil.getCurrentLevelTextValue(XmlUtil.getChildNodes(XmlUtil.buildDoc(resp)).get(0), "SubscriptionArn");
}
String attributeName = "DeliveryPolicy";
String attributeValue = "{" +
"\"http\": {" +
"\"defaultHealthyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":10,"+
"\"maxDelayTarget\":10,"+
"\"numRetries\":30,"+
"\"numMaxDelayRetries\": 11,"+
"\"numMinDelayRetries\": 11,"+
"\"backoffFunction\": \"geometric\""+
"}," +
"\"disableSubscriptionOverrides\": false," +
"\"defaultThrottlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":3" +
"}," +
"\"defaultSicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":1,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":16,"+
"\"numMinDelayRetries\": 1,"+
"\"numMaxDelayRetries\": 3,"+
"\"numNoDelayRetries\":3,"+
"\"backoffFunction\": \"exponential\""+
"}" +
"}" +
"}";
cns1.setTopicAttributes(new SetTopicAttributesRequest(topicArn, attributeName, attributeValue));
String attributeName2 = "DeliveryPolicy";
String attributeValue2 = "{\"healthyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":12,"+
"\"maxDelayTarget\":13,"+
"\"numRetries\":43,"+
"\"numMaxDelayRetries\": 23,"+
"\"numMinDelayRetries\": 20,"+
"\"backoffFunction\": \"arithmetic\""+
"}," +
"\"throttlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":7" +
"}," +
"\"sicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":15,"+
"\"numMinDelayRetries\": 4,"+
"\"numMaxDelayRetries\": 5,"+
"\"numNoDelayRetries\":6,"+
"\"backoffFunction\": \"exponential\""+
"}" +
"}";
cns2.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn1, attributeName2, attributeValue2));
GetSubscriptionAttributesResult result = cns3.getSubscriptionAttributes(new GetSubscriptionAttributesRequest(subscriptionArn2));
{
JSONObject effectiveDeliveryPolicy = new JSONObject(result.getAttributes().get("EffectiveDeliveryPolicy"));
assertTrue(effectiveDeliveryPolicy.has("healthyRetryPolicy"));
JSONObject healthyRetryPolicy = effectiveDeliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPolicy != null);
assertTrue("healthyRetryPolicy.numRetries returns incorrect value", healthyRetryPolicy.getInt("numRetries") == 30);
assertTrue("healthyRetryPolicy.minDelayTarget returns incorrect value", healthyRetryPolicy.getInt("minDelayTarget") == 10);
assertTrue("healthyRetryPolicy.maxDelayTarget returns incorrect value", healthyRetryPolicy.getInt("maxDelayTarget") == 10);
assertTrue("healthyRetryPolicy.numMinDelayRetries returns incorrect value", healthyRetryPolicy.getInt("numMinDelayRetries") == 11);
assertTrue("healthyRetryPolicy.numMaxDelayRetries returns incorrect value", healthyRetryPolicy.getInt("numMaxDelayRetries") == 11);
assertTrue("healthyRetryPolicy.numNoDelayRetries returns incorrect value", healthyRetryPolicy.getInt("numNoDelayRetries") == 0);
assertTrue("healthyRetryPolicy.backoffFunction returns incorrect value", healthyRetryPolicy.getString("backoffFunction").equals("geometric"));
assertTrue(effectiveDeliveryPolicy.has("sicklyRetryPolicy"));
JSONObject sicklyRetryPolicy = effectiveDeliveryPolicy.getJSONObject("sicklyRetryPolicy");
assertTrue(sicklyRetryPolicy != null);
assertTrue("sicklyRetryPolicy.numRetries returns incorrect value", sicklyRetryPolicy.getInt("numRetries") == 16);
assertTrue("sicklyRetryPolicy.minDelayTarget returns incorrect value", sicklyRetryPolicy.getInt("minDelayTarget") == 1);
assertTrue("sicklyRetryPolicy.maxDelayTarget returns incorrect value", sicklyRetryPolicy.getInt("maxDelayTarget") == 3);
assertTrue("sicklyRetryPolicy.numMinDelayRetries returns incorrect value", sicklyRetryPolicy.getInt("numMinDelayRetries") == 1);
assertTrue("sicklyRetryPolicy.numMaxDelayRetries returns incorrect value", sicklyRetryPolicy.getInt("numMaxDelayRetries") == 3);
assertTrue("sicklyRetryPolicy.numNoDelayRetries returns incorrect value", sicklyRetryPolicy.getInt("numNoDelayRetries") == 3);
assertTrue("sicklyRetryPolicy.backoffFunction returns incorrect value", sicklyRetryPolicy.getString("backoffFunction").equals("exponential"));
assertTrue(effectiveDeliveryPolicy.has("throttlePolicy"));
JSONObject throttlePolicy = effectiveDeliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.getInt("maxReceivesPerSecond") == 3);
assertTrue(result.getAttributes().get("ConfirmationWasAuthenticated").equals("false"));
JSONObject deliveryPolicy = new JSONObject(result.getAttributes().get("DeliveryPolicy"));
assertTrue(deliveryPolicy.has("healthyRetryPolicy"));
healthyRetryPolicy = deliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPolicy != null);
assertTrue("healthyRetryPolicy.numRetries returns incorrect value", healthyRetryPolicy.getInt("numRetries") == 30);
assertTrue("healthyRetryPolicy.minDelayTarget returns incorrect value", healthyRetryPolicy.getInt("minDelayTarget") == 10);
assertTrue("healthyRetryPolicy.maxDelayTarget returns incorrect value", healthyRetryPolicy.getInt("maxDelayTarget") == 10);
assertTrue("healthyRetryPolicy.numMinDelayRetries returns incorrect value", healthyRetryPolicy.getInt("numMinDelayRetries") == 11);
assertTrue("healthyRetryPolicy.numMaxDelayRetries returns incorrect value", healthyRetryPolicy.getInt("numMaxDelayRetries") == 11);
assertTrue("healthyRetryPolicy.numNoDelayRetries returns incorrect value", healthyRetryPolicy.getInt("numNoDelayRetries") == 0);
assertTrue("healthyRetryPolicy.backoffFunction returns incorrect value", healthyRetryPolicy.getString("backoffFunction").equals("geometric"));
assertTrue(deliveryPolicy.has("sicklyRetryPolicy"));
assertTrue(deliveryPolicy.has("throttlePolicy"));
throttlePolicy = deliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.getInt("maxReceivesPerSecond") == 3);
sicklyRetryPolicy = deliveryPolicy.getJSONObject("sicklyRetryPolicy");
assertTrue(sicklyRetryPolicy != null);
assertTrue("sicklyRetryPolicy.numRetries returns incorrect value", sicklyRetryPolicy.getInt("numRetries") == 16);
assertTrue("sicklyRetryPolicy.minDelayTarget returns incorrect value", sicklyRetryPolicy.getInt("minDelayTarget") == 1);
assertTrue("sicklyRetryPolicy.maxDelayTarget returns incorrect value", sicklyRetryPolicy.getInt("maxDelayTarget") == 3);
assertTrue("sicklyRetryPolicy.numMinDelayRetries returns incorrect value", sicklyRetryPolicy.getInt("numMinDelayRetries") == 1);
assertTrue("sicklyRetryPolicy.numMaxDelayRetries returns incorrect value", sicklyRetryPolicy.getInt("numMaxDelayRetries") == 3);
assertTrue("sicklyRetryPolicy.numNoDelayRetries returns incorrect value", sicklyRetryPolicy.getInt("numNoDelayRetries") == 3);
assertTrue("sicklyRetryPolicy.backoffFunction returns incorrect value", sicklyRetryPolicy.getString("backoffFunction").equals("exponential"));
assertTrue(result.getAttributes().get("TopicArn").equals(topicArn));
assertTrue(result.getAttributes().get("SubscriptionArn").equals(subscriptionArn2));
}
result = cns2.getSubscriptionAttributes(new GetSubscriptionAttributesRequest(subscriptionArn1));
{
JSONObject effectiveDeliveryPolicy = new JSONObject(result.getAttributes().get("EffectiveDeliveryPolicy"));
assertTrue(effectiveDeliveryPolicy.has("healthyRetryPolicy"));
JSONObject healthyRetryPolicy = effectiveDeliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPolicy != null);
assertTrue(healthyRetryPolicy.getInt("numRetries") == 43);
assertTrue(healthyRetryPolicy.getInt("minDelayTarget") == 12);
assertTrue(healthyRetryPolicy.getInt("maxDelayTarget") == 13);
assertTrue(healthyRetryPolicy.getInt("numMinDelayRetries") == 20);
assertTrue(healthyRetryPolicy.getInt("numMaxDelayRetries") == 23);
assertTrue(healthyRetryPolicy.getInt("numNoDelayRetries") == 0);
assertTrue(healthyRetryPolicy.getString("backoffFunction").equals("arithmetic"));
assertTrue(effectiveDeliveryPolicy.has("sicklyRetryPolicy"));
JSONObject sicklyRetryPolicy = effectiveDeliveryPolicy.getJSONObject("sicklyRetryPolicy");
assertTrue(sicklyRetryPolicy != null);
assertTrue(sicklyRetryPolicy.getInt("numRetries") == 15);
assertTrue(sicklyRetryPolicy.getInt("minDelayTarget") == 2);
assertTrue(sicklyRetryPolicy.getInt("maxDelayTarget") == 3);
assertTrue(sicklyRetryPolicy.getInt("numMinDelayRetries") == 4);
assertTrue(sicklyRetryPolicy.getInt("numMaxDelayRetries") == 5);
assertTrue(sicklyRetryPolicy.getInt("numNoDelayRetries") == 6);
assertTrue(sicklyRetryPolicy.getString("backoffFunction").equals("exponential"));
assertTrue(effectiveDeliveryPolicy.has("throttlePolicy"));
JSONObject throttlePolicy = effectiveDeliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.getInt("maxReceivesPerSecond") == 7);
assertTrue(result.getAttributes().get("ConfirmationWasAuthenticated").equals("false"));
JSONObject deliveryPolicy = new JSONObject(result.getAttributes().get("DeliveryPolicy"));
assertTrue(deliveryPolicy.has("healthyRetryPolicy"));
healthyRetryPolicy = deliveryPolicy.getJSONObject("healthyRetryPolicy");
assertTrue(healthyRetryPolicy != null);
assertTrue(healthyRetryPolicy.getInt("numRetries") == 43);
assertTrue(healthyRetryPolicy.getInt("minDelayTarget") == 12);
assertTrue(healthyRetryPolicy.getInt("maxDelayTarget") == 13);
assertTrue(healthyRetryPolicy.getInt("numMinDelayRetries") == 20);
assertTrue(healthyRetryPolicy.getInt("numMaxDelayRetries") == 23);
assertTrue(healthyRetryPolicy.getInt("numNoDelayRetries") == 0);
assertTrue(healthyRetryPolicy.getString("backoffFunction").equals("arithmetic"));
assertTrue(deliveryPolicy.has("sicklyRetryPolicy"));
assertTrue(deliveryPolicy.has("throttlePolicy"));
throttlePolicy = deliveryPolicy.getJSONObject("throttlePolicy");
assertTrue(throttlePolicy.getInt("maxReceivesPerSecond") == 7);
sicklyRetryPolicy = deliveryPolicy.getJSONObject("sicklyRetryPolicy");
assertTrue(sicklyRetryPolicy != null);
assertTrue(sicklyRetryPolicy.getInt("numRetries") == 15);
assertTrue(sicklyRetryPolicy.getInt("minDelayTarget") == 2);
assertTrue(sicklyRetryPolicy.getInt("maxDelayTarget") == 3);
assertTrue(sicklyRetryPolicy.getInt("numMinDelayRetries") == 4);
assertTrue(sicklyRetryPolicy.getInt("numMaxDelayRetries") == 5);
assertTrue(sicklyRetryPolicy.getInt("numNoDelayRetries") == 6);
assertTrue(sicklyRetryPolicy.getString("backoffFunction").equals("exponential"));
assertTrue(result.getAttributes().get("TopicArn").equals(topicArn));
assertTrue(result.getAttributes().get("SubscriptionArn").equals(subscriptionArn1));
}
} catch (Exception e) {
logger.error("test failed", e);
fail(e.getMessage());
}
}
@Test
public void testBadSetAttributes() {
try {
String topicArn = getTopic(1, USR.USER1);
String endpoint = CMBTestingConstants.HTTP_ENDPOINT_BASE_URL + "recv/" + rand.nextInt();
SubscribeRequest subscribeRequest = new SubscribeRequest();
subscribeRequest.setEndpoint(endpoint);
subscribeRequest.setProtocol("http");
subscribeRequest.setTopicArn(topicArn);
String subscriptionArn = cns1.subscribe(subscribeRequest).getSubscriptionArn();
String lastMessageUrl = endpoint.replace("recv", "info") + "?showLast=true";
if (subscriptionArn.equals("pending confirmation")) {
String resp = CNSTestingUtils.sendHttpMessage(lastMessageUrl, "");
JSONObject o = new JSONObject(resp);
if (!o.has("SubscribeURL")) {
fail("Message is not a confirmation messsage");
}
String subscriptionUrl = o.getString("SubscribeURL");
resp = CNSTestingUtils.sendHttpMessage(subscriptionUrl, "");
logger.info(resp);
subscriptionArn = XmlUtil.getCurrentLevelTextValue(XmlUtil.getChildNodes(XmlUtil.buildDoc(resp)).get(0), "SubscriptionArn");
}
String attributeName = "DeliveryPolicy";
String attributeValue = null;
try {
cns1.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn, attributeName, attributeValue));
fail("exception expected");
} catch (Exception ex) {
logger.info("expected exception", ex);
}
attributeValue = "{\"healthyRetryPolicy\":" +
"{"+
"\"numRetries\":43,"+
"\"numMaxDelayRetries\": 23,"+
"\"numMinDelayRetries\": 20,"+
"\"backoffFunction\": \"arithmetic\""+
"}," +
"\"throttlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":7" +
"}," +
"\"sicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numMinDelayRetries\": 4,"+
"\"numMaxDelayRetries\": 5,"+
"\"numNoDelayRetries\":6,"+
"\"backoffFunction\": \"exponential\""+
"}" +
"}";
try {
cns1.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn, attributeName, attributeValue));
fail("exception expected");
} catch (Exception ex) {
// DeliveryPolicy: healthyRetryPolicy.maxDelayTarget must be specified
logger.info("expected exception", ex);
}
attributeValue = "{\"healthyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":5,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":43,"+
"\"numMaxDelayRetries\": 23,"+
"\"numMinDelayRetries\": 20,"+
"\"backoffFunction\": \"arithmetic\""+
"}," +
"\"throttlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":7" +
"}," +
"\"sicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numMinDelayRetries\": 4,"+
"\"numMaxDelayRetries\": 5,"+
"\"numNoDelayRetries\":6,"+
"\"backoffFunction\": \"exponential\""+
"}" +
"}";
try {
cns1.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn, attributeName, attributeValue));
fail("exception expected");
} catch (Exception ex) {
// DeliveryPolicy: healthyRetryPolicy.maxDelayTarget must be greater than or equal to minDelayTarget
logger.info("expected exception", ex);
}
attributeValue = "{\"healthyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":20,"+
"\"numMaxDelayRetries\": 7,"+
"\"numMinDelayRetries\": 7,"+
"\"numNoDelayRetries\":7,"+
"\"backoffFunction\": \"arithmetic\""+
"}," +
"\"throttlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":7" +
"}," +
"\"sicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numMinDelayRetries\": 4,"+
"\"numMaxDelayRetries\": 5,"+
"\"numNoDelayRetries\":6,"+
"\"backoffFunction\": \"exponential\""+
"}" +
"}";
try {
cns1.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn, attributeName, attributeValue));
fail("exception expected");
} catch (Exception ex) {
// DeliveryPolicy: healthyRetryPolicy.numRetries must be greater than or equal to total of numMinDelayRetries, numNoDelayRetries and numMaxDelayRetries
logger.info("expected exception", ex);
}
attributeValue = "{\"healthyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":21,"+
"\"numMaxDelayRetries\": 7,"+
"\"numMinDelayRetries\": 7,"+
"\"numNoDelayRetries\":7,"+
"\"backoffFunction\": \"arithmetic\""+
"}," +
"\"throttlePolicy\":" +
"{" +
"\"maxReceivesPerSecond\":7" +
"}," +
"\"sicklyRetryPolicy\":" +
"{"+
"\"minDelayTarget\":2,"+
"\"maxDelayTarget\":3,"+
"\"numRetries\":20,"+
"\"numMaxDelayRetries\": 7,"+
"\"numMinDelayRetries\": 7,"+
"\"numNoDelayRetries\":7,"+
"\"backoffFunction\": \"arithmetic\""+
"}" +
"}";
try {
cns1.setSubscriptionAttributes(new SetSubscriptionAttributesRequest(subscriptionArn, attributeName, attributeValue));
fail("exception expected");
} catch (Exception ex) {
// DeliveryPolicy: sicklyRetryPolicy.numRetries must be greater than or equal to total of numMinDelayRetries, numNoDelayRetries and numMaxDelayRetries
logger.info("expected exception", ex);
}
} catch (Exception e) {
logger.error("test failed", e);
fail(e.getMessage());
}
}
@Test
public void testBadGetAttributes() {
try {
try {
GetSubscriptionAttributesResult result = cns1.getSubscriptionAttributes(new GetSubscriptionAttributesRequest(null));
fail("exception expected");
} catch (Exception ex) {
logger.info("expected exception", ex);
}
} catch (Exception e) {
logger.error("Exception occured", e);
fail("exception: "+e);
}
}
}