Package com.comcast.cqs.test.unit

Source Code of com.comcast.cqs.test.unit.CQSDelaySecondsTest

/**
* 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.cqs.test.unit;

import static org.junit.Assert.*;

import java.util.HashMap;
import org.junit.Test;

import com.amazonaws.services.sqs.model.ChangeMessageVisibilityRequest;
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.amazonaws.services.sqs.model.SendMessageRequest;
import com.amazonaws.services.sqs.model.SetQueueAttributesRequest;
import com.comcast.cmb.test.tools.CMBAWSBaseTest;

public class CQSDelaySecondsTest extends CMBAWSBaseTest {
 
    private static HashMap<String, String> attributeParams = new HashMap<String, String>();
   
    static {
        attributeParams.put("MessageRetentionPeriod", "600");
        attributeParams.put("VisibilityTimeout", "20");
        attributeParams.put("DelaySeconds", "20");
    }
   
    @Test
    public void testDelayQueue() {

      try {
       
        String queueUrl = getQueueUrl(1, USR.USER1);
        cqs1.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributeParams));

        Thread.sleep(1000);
       
            cqs1.sendMessage(new SendMessageRequest(queueUrl, "test message"));

            long ts1 = System.currentTimeMillis();
           
            while (true) {
           
        logger.info("checking for messages");

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(1);
        //receiveMessageRequest.setWaitTimeSeconds(20);
       
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        if (receiveMessageResult.getMessages().size() == 1) {
          assertTrue("Wrong message content", receiveMessageResult.getMessages().get(0).getBody().equals("test message"));
          logger.info("message found");
          long duration = System.currentTimeMillis() - ts1;
          assertTrue("Wrong delay " + duration, duration >= 18000 && duration <= 25000);
          break;
        }
       
        if (System.currentTimeMillis() - ts1 > 25*1000) {
          fail("no message found in 25 seconds");
        }
       
        Thread.sleep(500);
            }
     
    } catch (Exception ex) {
      logger.error("test failed", ex);
      fail(ex.getMessage());
    }
    }
   
    @Test
    public void testDelayMessage() {

      try {

        String queueUrl = getQueueUrl(1, USR.USER1);
        cqs1.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributeParams));

        Thread.sleep(1000);

        SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, "test message");
        sendMessageRequest.setDelaySeconds(10);
       
            cqs1.sendMessage(sendMessageRequest);

            long ts1 = System.currentTimeMillis();
           
            while (true) {
           
        logger.info("checking for messages");

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(1);
        //receiveMessageRequest.setWaitTimeSeconds(20);
       
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        if (receiveMessageResult.getMessages().size() == 1) {
          assertTrue("Wrong message content", receiveMessageResult.getMessages().get(0).getBody().equals("test message"));
          logger.info("message found");
          long duration = System.currentTimeMillis() - ts1;
          assertTrue("Wrong delay " + duration, duration >= 8000 && duration <= 15000);
          break;
        }
       
        if (System.currentTimeMillis() - ts1 > 25*1000) {
          fail("no message found in 25 seconds");
        }
       
        Thread.sleep(500);
            }
     
    } catch (Exception ex) {
      logger.error("test failed", ex);
      fail(ex.getMessage());
    }
    }

    @Test
    public void testMultipleDelayMessage() {

      try {

        String queueUrl = getQueueUrl(1, USR.USER1);
        cqs1.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributeParams));

        Thread.sleep(1000);

        for (int i=0; i<1000; i++) {
          logger.info("event=sending_message no=" + i);
          SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, "test message " + i);
          sendMessageRequest.setDelaySeconds(20);
              cqs1.sendMessage(sendMessageRequest);
        }

            long ts1 = System.currentTimeMillis();
            int count = 0;
           
            while (true) {
           
        logger.info("event=scanning_for_delayed_messages found_so_far=" + count + " seconds_passed=" + ((System.currentTimeMillis()-ts1)/1000));

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(10);
        receiveMessageRequest.setVisibilityTimeout(15);
        receiveMessageRequest.setWaitTimeSeconds(1);
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        count += receiveMessageResult.getMessages().size();
       
        if (count >=1000) {
          break;
        }

        if (System.currentTimeMillis() - ts1 > 120*1000) {
          fail("only " + count + " messages found in 120 seconds");
        }
            }

            ts1 = System.currentTimeMillis();
            count = 0;
           
            while (true) {
               
        logger.info("event=scanning_for_revisible_messages found_so_far=" + count + " seconds_passed=" + ((System.currentTimeMillis()-ts1)/1000));

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(10);
        receiveMessageRequest.setWaitTimeSeconds(1);
        receiveMessageRequest.setVisibilityTimeout(10);
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        count += receiveMessageResult.getMessages().size();
       
        for (Message msg : receiveMessageResult.getMessages()) {
          ChangeMessageVisibilityRequest changeMessageVisibilityRequest = new ChangeMessageVisibilityRequest(queueUrl, msg.getReceiptHandle(), 23);
          cqs1.changeMessageVisibility(changeMessageVisibilityRequest);
        }
       
        if (count >=1000) {
          break;
        }

        if (System.currentTimeMillis() - ts1 > 120*1000) {
          fail("only " + count + " messages found in 120 seconds");
        }
            }
           
            ts1 = System.currentTimeMillis();
            count = 0;

            while (true) {
               
        logger.info("event=deleting_newly_revisible_messages found_so_far=" + count + " seconds_passed=" + ((System.currentTimeMillis()-ts1)/1000));

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(10);
        receiveMessageRequest.setWaitTimeSeconds(1);
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        count += receiveMessageResult.getMessages().size();
       
        for (Message msg : receiveMessageResult.getMessages()) {
          DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(queueUrl, msg.getReceiptHandle());
          cqs1.deleteMessage(deleteMessageRequest);
        }

        if (count >=1000) {
          break;
        }

        if (System.currentTimeMillis() - ts1 > 120*1000) {
          fail("only " + count + " messages found in 120 seconds");
        }
            }
     
    } catch (Exception ex) {
      logger.error("test failed", ex);
      fail(ex.getMessage());
    }
    }   
   
    @Test
    public void testDelayOutlierMessage() {

      try {

        String queueUrl = getQueueUrl(1, USR.USER1);
        cqs1.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributeParams));

        Thread.sleep(1000);

        for (int i=0; i<1000; i++) {
          logger.info("event=sending_message no=" + i);
          SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, "test message " + i);
          sendMessageRequest.setDelaySeconds(60);
              cqs1.sendMessage(sendMessageRequest);
        }

      logger.info("event=sending_message no=" + 1001);
      SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, "test message 1001");
        sendMessageRequest.setDelaySeconds(4);
            cqs1.sendMessage(sendMessageRequest);

            long ts1 = System.currentTimeMillis();
            int count = 0;
           
            for (int i=0; i<30; i++) {
           
        logger.info("event=scanning_for_delayed_messages found_so_far=" + count + " seconds_passed=" + ((System.currentTimeMillis()-ts1)/1000));

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(10);
        receiveMessageRequest.setVisibilityTimeout(15);
        receiveMessageRequest.setWaitTimeSeconds(1);
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        count += receiveMessageResult.getMessages().size();
       
        for (Message msg : receiveMessageResult.getMessages()) {
          DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(queueUrl, msg.getReceiptHandle());
          cqs1.deleteMessage(deleteMessageRequest);
        }
       
        if (count > 1) {
          fail("expected 1 message but found " + count);
        }
            }
           
            if (count != 1) {
        fail("expected 1 message but found " + count);
            }
     
    } catch (Exception ex) {
      logger.error("test failed", ex);
      fail(ex.getMessage());
    }
    }   

    @Test
    public void testVTOOutlierMessage() {

      try {

        String queueUrl = getQueueUrl(1, USR.USER1);
        cqs1.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributeParams));

        Thread.sleep(1000);

        for (int i=0; i<1000; i++) {
          logger.info("event=sending_message no=" + i);
          SendMessageRequest sendMessageRequest = new SendMessageRequest(queueUrl, "test message " + i);
          sendMessageRequest.setDelaySeconds(0);
              cqs1.sendMessage(sendMessageRequest);
        }

            long ts1 = System.currentTimeMillis();
            int count = 0;
            boolean first = true;
           
            while (true) {
           
        logger.info("event=scanning_for_messages found_so_far=" + count + " seconds_passed=" + ((System.currentTimeMillis()-ts1)/1000));

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(10);
        if (first) {
          first = false;
          receiveMessageRequest.setVisibilityTimeout(20);
        } else {
          receiveMessageRequest.setVisibilityTimeout(120);
        }
        receiveMessageRequest.setWaitTimeSeconds(1);
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        count += receiveMessageResult.getMessages().size();
       
        if (count >= 1000) {
          break;
        }
       
        if (System.currentTimeMillis() - ts1 > 120*1000) {
          fail("only " + count + " messages found in 120 seconds");
        }
            }
           
            count = 0;
            ts1 = System.currentTimeMillis();
           
            for (int i=0; i<30; i++) {
               
        logger.info("event=scanning_for_delayed_messages found_so_far=" + count + " seconds_passed=" + ((System.currentTimeMillis()-ts1)/1000));

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(10);
        receiveMessageRequest.setVisibilityTimeout(15);
        receiveMessageRequest.setWaitTimeSeconds(1);
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        count += receiveMessageResult.getMessages().size();
       
        for (Message msg : receiveMessageResult.getMessages()) {
          DeleteMessageRequest deleteMessageRequest = new DeleteMessageRequest(queueUrl, msg.getReceiptHandle());
          cqs1.deleteMessage(deleteMessageRequest);
        }
       
        if (count > 10) {
          fail("expected 1 message but found " + count);
        }
            }
           
            if (count != 10) {
        fail("expected 1 message but found " + count);
            }
           
    } catch (Exception ex) {
      logger.error("test failed", ex);
      fail(ex.getMessage());
    }
    }   

    /**
     * Change queue attributes to turn queue into a standard non-delay queue and check functionality
     */
    @Test
    public void testNoDelay() {

      try {
       
        String queueUrl = getQueueUrl(1, USR.USER1);
        cqs1.setQueueAttributes(new SetQueueAttributesRequest(queueUrl, attributeParams));

        Thread.sleep(1000);

        SetQueueAttributesRequest setQueueAttributesRequest = new SetQueueAttributesRequest();
        setQueueAttributesRequest.setQueueUrl(queueUrl);
          attributeParams.put("DelaySeconds", "0");
        setQueueAttributesRequest.setAttributes(attributeParams);

        cqs1.setQueueAttributes(setQueueAttributesRequest);
       
            cqs1.sendMessage(new SendMessageRequest(queueUrl, "test message"));

            long ts1 = System.currentTimeMillis();
           
            while (true) {
           
        logger.info("checking for messages");

        ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest();
        receiveMessageRequest.setQueueUrl(queueUrl);
        receiveMessageRequest.setMaxNumberOfMessages(1);
        //receiveMessageRequest.setWaitTimeSeconds(20);
       
        ReceiveMessageResult receiveMessageResult = cqs1.receiveMessage(receiveMessageRequest);

        if (receiveMessageResult.getMessages().size() == 1) {
          assertTrue("Wrong message content", receiveMessageResult.getMessages().get(0).getBody().equals("test message"));
          logger.info("message found");
          long duration = System.currentTimeMillis() - ts1;
          assertTrue("Wrong delay " + duration, duration >= 0 && duration <= 2000);
          break;
        }
       
        if (System.currentTimeMillis() - ts1 > 25*1000) {
          fail("no message found in 25 seconds");
        }
       
        Thread.sleep(500);
            }
     
    } catch (Exception ex) {
      logger.error("test failed", ex);
      fail(ex.getMessage());
    }
    }
}
TOP

Related Classes of com.comcast.cqs.test.unit.CQSDelaySecondsTest

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.