Package com.comcast.cns.test.unit

Source Code of com.comcast.cns.test.unit.SubscriptionDeliveryPolicyTest

/**
* 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 org.apache.log4j.Logger;
import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.comcast.cmb.common.controller.CMBControllerServlet;
import com.comcast.cmb.common.persistence.PersistenceFactory;
import com.comcast.cmb.common.util.CMBException;
import com.comcast.cmb.common.util.Util;
import com.comcast.cns.model.CNSRetryPolicy;
import com.comcast.cns.model.CNSSubscriptionDeliveryPolicy;
import com.comcast.cns.model.CNSThrottlePolicy;
import com.comcast.cns.model.CNSRetryPolicy.CnsBackoffFunction;

public class SubscriptionDeliveryPolicyTest {

  private static Logger logger = Logger.getLogger(SubscriptionDeliveryPolicyTest.class);

    @Before
    public void setup() throws Exception {
        Util.initLog4jTest();
        CMBControllerServlet.valueAccumulator.initializeAllCounters();
        PersistenceFactory.reset();
    }

    @After   
    public void tearDown() {
        CMBControllerServlet.valueAccumulator.deleteAllCounters();
    }
    
   @Test
   public void testConstructor() {
     String jsonStr = "{\"healthyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":2,"+
            "\"numRetries\":10,"+
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"linear\""+
            "}," +
            "\"throttlePolicy\":" +
            "{" +
            "\"maxReceivesPerSecond\":5" +
         "}" +
            "}";
    
     String jsonStr2 = "{\"sicklyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":2,"+
            "\"numRetries\":10,"+
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"exponential\""+
            "}" +
            "" +
            "}";
     String jsonStr3 = "{}";
    
     String jsonStr4 = "{\"healthyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":2,"+
            "\"numRetries\":\"cookie\"," +
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"linear\""+
            "}" +
            "}";
    
     String jsonStr5 = "{\"sicklyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":2,"+
            "\"numRetries\":\"cookie\"," +
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"linear\""+
            "}" +
            "}";
    
     String jsonStr6 = "{" +    
         "\"throttlePolicy\":" +
              "{" +
              "\"maxReceivesPerSecond\":\"stand\"" +
           "}" +
            "}";
    
     String jsonStr7 = "{\"healthyRetryPolicy\":" +        
         "{"+
              "\"minDelayTarget\":1,"+
              "\"maxDelayTarget\":2,"+
              "\"numRetries\":10,"+
              "\"numMaxDelayRetries\": 4,"+
              "\"numMinDelayRetries\": 6,"+
              "\"backoffFunction\": \"linear\""+
              "}," +
              "\"throttlePolicy\":" +
              "{" +
              "\"maxReceivesPerSecond\":5" +
           "}," +
           "\"maximalPolicy\":" +
              "{" +
              "\"mx\":7" +
           "}" +
              "}";
    
     String jsonStr8 = "{\"healthyRetryPolicy\":" +        
         "{"+
              "\"minDelayTarget\":1,"+
              "\"maxDelayTarget\":3601,"+
              "\"numRetries\":10,"+
              "\"numMaxDelayRetries\": 4,"+
              "\"numMinDelayRetries\": 6,"+
              "\"backoffFunction\": \"linear\""+
              "}," +
              "\"throttlePolicy\":" +
              "{" +
              "\"maxReceivesPerSecond\":5" +
           "}" +
          
              "}";
    
     try {
       JSONObject json = new JSONObject(jsonStr);
       CNSSubscriptionDeliveryPolicy subpolicy = new CNSSubscriptionDeliveryPolicy(json);
       CNSRetryPolicy hRetryPolicy = subpolicy.getHealthyRetryPolicy();
       assertTrue(hRetryPolicy.getMinDelayTarget() == 1);
       assertTrue(hRetryPolicy.getMaxDelayTarget() == 2);
       assertTrue(hRetryPolicy.getNumRetries() == 10);
       assertTrue(hRetryPolicy.getNumMaxDelayRetries() == 4);
       assertTrue(hRetryPolicy.getNumMinDelayRetries() == 6);
       assertTrue(hRetryPolicy.getBackOffFunction() == CnsBackoffFunction.linear);
       CNSThrottlePolicy tPolicy = subpolicy.getThrottlePolicy();
       assertTrue(tPolicy.getMaxReceivesPerSecond() == 5);
       assertTrue(subpolicy.getSicklyRetryPolicy() == null);
      
       //Test 2nd Json constructor
       JSONObject json2 = new JSONObject(jsonStr2);
       CNSSubscriptionDeliveryPolicy subpolicy3 = new CNSSubscriptionDeliveryPolicy(json2);
       hRetryPolicy = subpolicy3.getHealthyRetryPolicy();
       assertTrue(hRetryPolicy.getMinDelayTarget() == 20);
       assertTrue(hRetryPolicy.getMaxDelayTarget() == 20);
       assertTrue(hRetryPolicy.getNumRetries() == 3);
       assertTrue(hRetryPolicy.getNumMaxDelayRetries() == 0);
       assertTrue(hRetryPolicy.getNumMinDelayRetries() == 0);
       assertTrue(hRetryPolicy.getBackOffFunction() == CnsBackoffFunction.linear);
       CNSThrottlePolicy tPolicy2 = subpolicy3.getThrottlePolicy();
       assertTrue(tPolicy2.getMaxReceivesPerSecond() == null);
       CNSRetryPolicy sRetryPolicy = subpolicy3.getSicklyRetryPolicy();
       assertTrue(sRetryPolicy.getMinDelayTarget() == 1);
       assertTrue(sRetryPolicy.getMaxDelayTarget() == 2);
       assertTrue(sRetryPolicy.getNumRetries() == 10);
       assertTrue(sRetryPolicy.getNumMaxDelayRetries() == 4);
       assertTrue(sRetryPolicy.getNumMinDelayRetries() == 6);
       assertTrue(sRetryPolicy.getBackOffFunction() == CnsBackoffFunction.exponential);
      
       //Test default constructor
       CNSSubscriptionDeliveryPolicy subpolicy2 = new CNSSubscriptionDeliveryPolicy();
       hRetryPolicy = subpolicy2.getHealthyRetryPolicy();
       assertTrue(hRetryPolicy.getMinDelayTarget() == 20);
       assertTrue(hRetryPolicy.getMaxDelayTarget() == 20);
       assertTrue(hRetryPolicy.getNumRetries() == 3);
       assertTrue(hRetryPolicy.getNumMaxDelayRetries() == 0);
       assertTrue(hRetryPolicy.getNumMinDelayRetries() == 0);
       assertTrue(hRetryPolicy.getBackOffFunction() == CnsBackoffFunction.linear);
       tPolicy = subpolicy2.getThrottlePolicy();
       logger.debug("tPolicy: " + tPolicy.toString());
       assertTrue(tPolicy.getMaxReceivesPerSecond() == null);
       assertTrue(subpolicy.getSicklyRetryPolicy() == null);
      
      
       JSONObject json3 = new JSONObject(jsonStr3);
       CNSSubscriptionDeliveryPolicy subpolicy4 = new CNSSubscriptionDeliveryPolicy(json3);
       hRetryPolicy = subpolicy4.getHealthyRetryPolicy();
       assertTrue(hRetryPolicy.getMinDelayTarget() == 20);
       assertTrue(hRetryPolicy.getMaxDelayTarget() == 20);
       assertTrue(hRetryPolicy.getNumRetries() == 3);
       assertTrue(hRetryPolicy.getNumMaxDelayRetries() == 0);
       assertTrue(hRetryPolicy.getNumMinDelayRetries() == 0);
       assertTrue(hRetryPolicy.getBackOffFunction() == CnsBackoffFunction.linear);
       tPolicy = subpolicy2.getThrottlePolicy();
       logger.debug("tPolicy: " + tPolicy.toString());
       assertTrue(tPolicy.getMaxReceivesPerSecond() == null);
       assertTrue(subpolicy.getSicklyRetryPolicy() == null);
      
       boolean exceptionOccured = false;
       json = new JSONObject(jsonStr4);
     
       try {
        new CNSSubscriptionDeliveryPolicy(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 1:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
       
       json = new JSONObject(jsonStr5);
       
       try {
        new CNSSubscriptionDeliveryPolicy(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 2:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
       json = new JSONObject(jsonStr6);
       
       try {
        new CNSSubscriptionDeliveryPolicy(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 3:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
       json = new JSONObject(jsonStr7);
       
       try {
        new CNSSubscriptionDeliveryPolicy(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 4:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
      
       json = new JSONObject(jsonStr8);
       try {
        new CNSSubscriptionDeliveryPolicy(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 4:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
     } catch (Exception e) {
             logger.error("Exception occured", e);
             fail("exception: "+e);
     }
   }
  
   @Test
   public void testUpdate() {
     String jsonStr = "{\"healthyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":12,"+
            "\"maxDelayTarget\":13,"+
            "\"numRetries\":43,"+
            "\"numMaxDelayRetries\": 23,"+
            "\"numMinDelayRetries\": 20,"+
            "\"backoffFunction\": \"arithmetic\""+
            "}," +
            "\"throttlePolicy\":" +
            "{" +
            "\"maxReceivesPerSecond\":7" +
         "}"+
            "}";
    
     String jsonStr2 = "{" +
        "\"healthyRetryPolicy\":null," +   
         "\"sicklyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":32,"+
            "\"maxDelayTarget\":33,"+
            "\"numRetries\":99,"+
            "\"numMaxDelayRetries\": 32,"+
            "\"numMinDelayRetries\": 31,"+
            "\"numNoDelayRetries\":33," +
            "\"backoffFunction\": \"exponential\""+
            "}" +
            "}";
    
     String jsonStr4 = "{\"healthyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":2,"+
            "\"numRetries\":1," +
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"linear\""+
            "}" +
            "}";
    
     String jsonStr5 = "{\"sicklyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":2,"+
            "\"numRetries\":\"cookie\"," +
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"linear\""+
            "}" +
            "}";
    
     String jsonStr6 = "{" +    
         "\"throttlePolicy\":" +
              "{" +
              "\"maxReceivesPerSecond\":\"stand\"" +
           "}" +
            "}";
    
     String jsonStr7 = "{" +    
         "\"throttlePolicy\":{\"cookie monster\":\"cookie monster\"}" +
            "}";
    
     String jsonStr8 = "{\"healthyRetryPolicy\":" +        
         "{"+
            "\"minDelayTarget\":1,"+
            "\"maxDelayTarget\":3601,"+
            "\"numRetries\":13," +
            "\"numMaxDelayRetries\": 4,"+
            "\"numMinDelayRetries\": 6,"+
            "\"backoffFunction\": \"linear\""+
            "}" +
            "}";
    
     try {
       CNSSubscriptionDeliveryPolicy subpolicy = new CNSSubscriptionDeliveryPolicy();
       JSONObject json = new JSONObject(jsonStr);
       subpolicy.update(json);
       CNSRetryPolicy hRetryPolicy = subpolicy.getHealthyRetryPolicy();
       logger.debug("hRetryPolicy is: " + hRetryPolicy.toString());
       assertTrue(hRetryPolicy.getMinDelayTarget() == 12);
       assertTrue(hRetryPolicy.getMaxDelayTarget() == 13);
       assertTrue(hRetryPolicy.getNumRetries() == 43);
       assertTrue(hRetryPolicy.getNumMaxDelayRetries() == 23);
       assertTrue(hRetryPolicy.getNumMinDelayRetries() == 20);
       assertTrue(hRetryPolicy.getBackOffFunction() == CnsBackoffFunction.arithmetic);
       CNSThrottlePolicy tPolicy = subpolicy.getThrottlePolicy();
       assertTrue(tPolicy.getMaxReceivesPerSecond() == 7);
      
       CNSRetryPolicy sRetryPolicy = subpolicy.getSicklyRetryPolicy();
       assertTrue(sRetryPolicy == null);
      
       json = new JSONObject(jsonStr2);
       subpolicy.update(json);
       hRetryPolicy = subpolicy.getHealthyRetryPolicy();
       assertTrue(hRetryPolicy != null);
       logger.debug("hRetryPolicy is: " + hRetryPolicy.toString());
       assertTrue(hRetryPolicy.getMinDelayTarget() == 20);
       assertTrue(hRetryPolicy.getMaxDelayTarget() == 20);
       assertTrue(hRetryPolicy.getNumRetries() == 3);
       assertTrue(hRetryPolicy.getNumMaxDelayRetries() == 0);
       assertTrue(hRetryPolicy.getNumMinDelayRetries() == 0);
       assertTrue(hRetryPolicy.getBackOffFunction() == CnsBackoffFunction.linear);
       tPolicy = subpolicy.getThrottlePolicy();
       assertTrue(tPolicy.getMaxReceivesPerSecond() == null);
       sRetryPolicy = subpolicy.getSicklyRetryPolicy();
       logger.debug("sRetryPolicy is: " + sRetryPolicy.toString());
       assertTrue(sRetryPolicy.getMinDelayTarget() == 32);
       assertTrue(sRetryPolicy.getMaxDelayTarget() == 33);
       assertTrue(sRetryPolicy.getNumRetries() == 99);
       assertTrue(sRetryPolicy.getNumMaxDelayRetries() == 32);
       assertTrue(sRetryPolicy.getNumMinDelayRetries() == 31);
       assertTrue(sRetryPolicy.getNumNoDelayRetries() == 33);
       assertTrue(sRetryPolicy.getBackOffFunction() == CnsBackoffFunction.exponential);
      
       boolean exceptionOccured = false;
       json = new JSONObject(jsonStr4);
     
       try {
         subpolicy.update(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 1:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
       
       json = new JSONObject(jsonStr5);
       
       try {
         subpolicy.update(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 2:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
       json = new JSONObject(jsonStr6);
       
       try {
         subpolicy.update(json);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 3:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
       json = new JSONObject(jsonStr7);
       
       try {
         subpolicy.update(json);
         logger.debug("subpolicy: " + subpolicy);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 4:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
       json = new JSONObject(jsonStr8);
       
       try {
         subpolicy.update(json);
         logger.debug("subpolicy: " + subpolicy);
       } catch (Exception e) {
        if(e instanceof CMBException) {
          assertTrue(true);
          exceptionOccured = true;
          logger.debug("Exception 5:");
          logger.debug(e.getMessage());
        } else {
          assertFalse(true);
        }
       }
       assertTrue(exceptionOccured);
       exceptionOccured = false;
      
     } catch (Exception e) {
             logger.error("Exception occured", e);
             fail("exception: "+e);
     }
   }
  
   @Test
   public void testToStringToJSON() {
     try {
       CNSSubscriptionDeliveryPolicy subpolicy = new CNSSubscriptionDeliveryPolicy();
       JSONObject subpolicyJSON = subpolicy.toJSON();
       logger.info(subpolicy.toString());
       assertTrue(subpolicyJSON.has("healthyRetryPolicy"));
       JSONObject respJSON = subpolicyJSON.getJSONObject("healthyRetryPolicy");
      assertTrue(respJSON.has("backoffFunction"));
      assertTrue(respJSON.getString("backoffFunction").equals("linear"));
      assertTrue(respJSON.has("numMaxDelayRetries"));
      assertTrue(respJSON.getInt("numMaxDelayRetries") == 0);
      assertTrue(respJSON.has("numMinDelayRetries"));
      assertTrue(respJSON.getInt("numMinDelayRetries") == 0);
      assertTrue(respJSON.has("numRetries"));
      assertTrue(respJSON.getInt("numRetries") == 3);
      assertTrue(respJSON.has("minDelayTarget"));
      assertTrue(respJSON.getInt("minDelayTarget") == 20);
      assertTrue(respJSON.has("maxDelayTarget"));
      assertTrue(respJSON.getInt("maxDelayTarget") == 20);
     
      assertTrue(subpolicyJSON.get("sicklyRetryPolicy") == JSONObject.NULL);
      String jsonStr = "{\"sicklyRetryPolicy\":null,\"healthyRetryPolicy\":{\"backoffFunction\":\"linear\",\"numMinDelayRetries\":0,\"numMaxDelayRetries\":0,\"numRetries\":3,\"minDelayTarget\":20,\"numNoDelayRetries\":0,\"maxDelayTarget\":20},\"throttlePolicy\":{\"maxReceivesPerSecond\":null}}";
      assertTrue(subpolicy.toString().equals(jsonStr));
     
     } catch (Exception e) {
             logger.error("Exception occured", e);
             fail("exception: "+e);
     }
   }
  
   @Test
   public void testGettersSetters() {
     try {
       CNSSubscriptionDeliveryPolicy subpolicy = new CNSSubscriptionDeliveryPolicy();
       CNSRetryPolicy hrp = new CNSRetryPolicy();
       hrp.setBackOffFunction(CnsBackoffFunction.geometric);
      
       CNSRetryPolicy srp = new CNSRetryPolicy();
       srp.setBackOffFunction(CnsBackoffFunction.exponential);
      
       CNSThrottlePolicy tp = new CNSThrottlePolicy();
       tp.setMaxReceivesPerSecond(78);
      
       subpolicy.setHealthyRetryPolicy(hrp);
       subpolicy.setSicklyRetryPolicy(srp);
       subpolicy.setThrottlePolicy(tp);
      
       CNSRetryPolicy hrp2 = subpolicy.getHealthyRetryPolicy();
       CNSRetryPolicy srp2 = subpolicy.getSicklyRetryPolicy();
       CNSThrottlePolicy tp2 = subpolicy.getThrottlePolicy();
      
       assertTrue(hrp2 != null);
       assertTrue(srp2 != null);
       assertTrue(tp2 != null);
      
       assertTrue(hrp2.getBackOffFunction() == CnsBackoffFunction.geometric);
       assertTrue(srp2.getBackOffFunction() == CnsBackoffFunction.exponential);
       assertTrue(tp2.getMaxReceivesPerSecond() == 78);
      
     } catch (Exception e) {
             logger.error("Exception occured", e);
             fail("exception: "+e);
     }
   }
}
TOP

Related Classes of com.comcast.cns.test.unit.SubscriptionDeliveryPolicyTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.