Package com.betfair.cougar.testing.concurrency

Source Code of com.betfair.cougar.testing.concurrency.RestConcurrentRequestsAcrossMultipleOperationsJETTTest$RestConcurrentRequestsAcrossMultipleOperationsTestResultBean

/*
* Copyright 2013, The Sporting Exchange Limited
*
* 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.betfair.cougar.testing.concurrency;

import com.betfair.testing.utils.cougar.misc.XMLHelpers;
import com.betfair.testing.utils.cougar.beans.HttpCallBean;
import com.betfair.testing.utils.cougar.beans.HttpResponseBean;
import com.betfair.testing.utils.cougar.enums.CougarMessageContentTypeEnum;
import com.betfair.testing.utils.cougar.enums.CougarMessageProtocolRequestTypeEnum;
import com.betfair.testing.utils.cougar.enums.CougarMessageProtocolResponseTypeEnum;
import com.betfair.testing.utils.cougar.manager.CougarManager;
import org.w3c.dom.Document;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

public class RestConcurrentRequestsAcrossMultipleOperationsJETTTest {

 
 
  private List<Thread> threads = new ArrayList<Thread>();
  private List<Executor> executors = new ArrayList<Executor>();
 
  private static final int OK_STATUS_CODE = 200;
  private static final String RESPONSE = "Response ";
 
  public List<Thread> getThreads() {
    return threads;
  }

  public void setThreads(List<Thread> threads) {
    this.threads = threads;
  }

  public List<Executor> getExecutors() {
    return executors;
  }

  public void setExecutors(List<Executor> executors) {
    this.executors = executors;
  }

  public RestConcurrentRequestsAcrossMultipleOperationsTestResultBean executeTest(Integer numberOfThreadsPerOperation, Integer numberOfCallsPerThread, CougarMessageProtocolRequestTypeEnum protocolRequestType, CougarMessageContentTypeEnum responseContentType) throws InterruptedException {
   
    //Build required calls and executors, and thread them
    for (int i = 0; i < numberOfThreadsPerOperation; i++) {
      SimpleExecutor simpleExecutor = new SimpleExecutor("simpleExecutor"+i);
      ComplexOperationExecutor complexOperationExecutor = new ComplexOperationExecutor("complexOperationExecutor"+i);
      ParamterStylesExecutor paramterStylesExecutor = new ParamterStylesExecutor("paramterStylesExecutor"+i);
      executors.add(simpleExecutor);
      executors.add(complexOperationExecutor);
      executors.add(paramterStylesExecutor);
      Thread thread1 = new Thread(simpleExecutor);
      Thread thread2 = new Thread(complexOperationExecutor);
      Thread thread3 = new Thread(paramterStylesExecutor);
      threads.add(thread1);
      threads.add(thread2);
      threads.add(thread3);
      simpleExecutor.setNumberOfRequests(numberOfCallsPerThread);
      simpleExecutor.setRequestProtocolTypeEnum(protocolRequestType);
      simpleExecutor.buildCalls(responseContentType);
      complexOperationExecutor.setNumberOfRequests(numberOfCallsPerThread);
      complexOperationExecutor.setRequestProtocolTypeEnum(protocolRequestType);
      complexOperationExecutor.buildCalls(responseContentType);
      paramterStylesExecutor.setNumberOfRequests(numberOfCallsPerThread);
      paramterStylesExecutor.setRequestProtocolTypeEnum(protocolRequestType);
      paramterStylesExecutor.buildCalls(responseContentType);
    }
   
    //Start the threads
    for (Thread thread: threads) {
      thread.start();
    }
   
    //Wait until all threads finished
    for (Thread thread: threads) {
      thread.join();
    }

    //Create maps to hold responses to assert
    Map<String, HttpResponseBean> expectedResponses = new LinkedHashMap<String, HttpResponseBean>();
    Map<String, HttpResponseBean> actualResponses = new LinkedHashMap<String, HttpResponseBean>();
   
    //Populate response maps
    for (Executor executor: executors) {
      Map<String, HttpResponseBean> executorExpectedResponses = executor.getExpectedResponses();
      expectedResponses.putAll(executorExpectedResponses);
      Map<String, HttpResponseBean> executorActualResponses = executor.getActualResponses();
      actualResponses.putAll(executorActualResponses)
    }
   
    //Put maps into bean and return
    RestConcurrentRequestsAcrossMultipleOperationsTestResultBean returnBean = new RestConcurrentRequestsAcrossMultipleOperationsTestResultBean();
    returnBean.setActualResponses(actualResponses);
    returnBean.setExpectedResponses(expectedResponses);
    return returnBean;

  }
 
  public abstract class Executor implements Runnable {
    public abstract Map<String, HttpResponseBean> getExpectedResponses();
    public abstract Map<String, HttpResponseBean> getActualResponses();
  };
 
 
  public class SimpleExecutor extends Executor {
   
    public SimpleExecutor(String identifier) {
      this.identifier = identifier;
    }
 
    private XMLHelpers xHelpers = new XMLHelpers();
    private CougarManager cougarManager = CougarManager.getInstance();
   
    private String identifier;
    private int numberOfRequests;
    private CougarMessageProtocolRequestTypeEnum requestProtocolTypeEnum;

    private Map<String, HttpResponseBean> expectedResponses = new LinkedHashMap<String, HttpResponseBean>();
    private Map<String, HttpResponseBean> actualResponses = new LinkedHashMap<String, HttpResponseBean>();
    private List<HttpCallBean> httpCallBeans = new ArrayList<HttpCallBean>();
    private Map<String, Timestamp> expectedRequestTimes = new LinkedHashMap<String, Timestamp>();
   
    public CougarMessageProtocolRequestTypeEnum getRequestProtocolTypeEnum() {
      return requestProtocolTypeEnum;
    }

    public void setRequestProtocolTypeEnum(
        CougarMessageProtocolRequestTypeEnum requestProtocolTypeEnum) {
      this.requestProtocolTypeEnum = requestProtocolTypeEnum;
    }

    public void run() {
      this.makeCalls();
    }
   
    public void buildCalls(CougarMessageContentTypeEnum responseContentTypeEnum) {
     
      for (int i = 0; i < numberOfRequests+1; i++) {
        //Setup call beans
        HttpCallBean callBean = new HttpCallBean();
        callBean.setServiceName("baseline","cougarBaseline");
        callBean.setVersion("v2");
        callBean.setOperationName("testSimpleGet","simple");
        LinkedHashMap<String, String> queryParams = new LinkedHashMap<String, String>();
        String queryParameter = identifier + "-" + i;
        queryParams.put("message",queryParameter );
        callBean.setQueryParams(queryParams);
        httpCallBeans.add(callBean);
             
        Map<String, String> acceptProtocols = new HashMap<String,String>();
        switch (responseContentTypeEnum) {
        case JSON:
          acceptProtocols.put("application/json", "");
          break;
        case XML:
          acceptProtocols.put("application/xml", "");
          break;
        }
        callBean.setAcceptProtocols(acceptProtocols);
       
        //Store expected responses
        HttpResponseBean responseBean = new HttpResponseBean();
        String responseXmlString = "<SimpleResponse><message>" + queryParameter + "</message></SimpleResponse>";
        Document responseBaseObject = xHelpers.getXMLObjectFromString(responseXmlString);
        Map<CougarMessageProtocolRequestTypeEnum, Object> builtExpectedResponse = cougarManager.convertResponseToRestTypes(responseBaseObject, callBean);
        switch (responseContentTypeEnum) {
        case XML:
          responseBean.setResponseObject(builtExpectedResponse.get(CougarMessageProtocolRequestTypeEnum.RESTXML));
          break;
        case JSON:
          responseBean.setResponseObject(builtExpectedResponse.get(CougarMessageProtocolRequestTypeEnum.RESTJSON));
          break;
        }
        responseBean.setHttpStatusCode(OK_STATUS_CODE);
        responseBean.setHttpStatusText("OK");
 
        expectedResponses.put(identifier + RESPONSE + i, responseBean);
      }
    }
   
    public void makeCalls() {
      //Make the calls
      int loopCounter = 0;
      for(HttpCallBean callBean: httpCallBeans) {
        Date time = new Date();       
        expectedRequestTimes.put(identifier + RESPONSE + loopCounter, new Timestamp(time.getTime()));
        cougarManager.makeRestCougarHTTPCall(callBean, requestProtocolTypeEnum);
        loopCounter++;
      }
     
     
      //Get actual responses
      loopCounter=0;
      for (HttpCallBean httpCallBean: httpCallBeans) {
        HttpResponseBean responseBean = httpCallBean.getResponseObjectsByEnum(CougarMessageProtocolResponseTypeEnum.REST);
        responseBean.setResponseHeaders(null);
        actualResponses.put(identifier + RESPONSE + loopCounter, responseBean);
        loopCounter++;
      }
     
      //Set the expected response time
      for (String keyString: expectedResponses.keySet()) {
        HttpResponseBean responseBean = expectedResponses.get(keyString);
        Timestamp requestTime = expectedRequestTimes.get(keyString);
        responseBean.setRequestTime(requestTime);
        responseBean.setResponseTime(requestTime);
      }
     
    }

    public Map<String, HttpResponseBean> getActualResponses() {
      return actualResponses;
    }

    public void setActualResponses(Map<String, HttpResponseBean> actualResponses) {
      this.actualResponses = actualResponses;
    }

    public Map<String, HttpResponseBean> getExpectedResponses() {
      return expectedResponses;
    }

    public void setExpectedResponses(Map<String, HttpResponseBean> expectedResponses) {
      this.expectedResponses = expectedResponses;
    }

    public int getNumberOfRequests() {
      return numberOfRequests;
    }

    public void setNumberOfRequests(int numberOfRequests) {
      this.numberOfRequests = numberOfRequests;
    }
  }
 
 
  public class ParamterStylesExecutor extends Executor {
   
    public ParamterStylesExecutor(String identifier) {
      this.identifier = identifier;
    }
 
    private XMLHelpers xHelpers = new XMLHelpers();
    private CougarManager cougarManager = CougarManager.getInstance();
   
    private String identifier;
    private int numberOfRequests;
    private CougarMessageProtocolRequestTypeEnum requestProtocolTypeEnum;

    private Map<String, HttpResponseBean> expectedResponses = new LinkedHashMap<String, HttpResponseBean>();
    private Map<String, HttpResponseBean> actualResponses = new LinkedHashMap<String, HttpResponseBean>();
    private List<HttpCallBean> httpCallBeans = new ArrayList<HttpCallBean>();
    private Map<String, Timestamp> expectedRequestTimes = new LinkedHashMap<String, Timestamp>();
   
    public CougarMessageProtocolRequestTypeEnum getRequestProtocolTypeEnum() {
      return requestProtocolTypeEnum;
    }

    public void setRequestProtocolTypeEnum(
        CougarMessageProtocolRequestTypeEnum requestProtocolTypeEnum) {
      this.requestProtocolTypeEnum = requestProtocolTypeEnum;
    }

    public void run() {
      this.makeCalls();
    }
   
    public void buildCalls(CougarMessageContentTypeEnum responseContentTypeEnum) {
     
      for (int i = 0; i < numberOfRequests+1; i++) {
        //Setup call beans
        HttpCallBean callBean = new HttpCallBean();
        callBean.setServiceName("baseline","cougarBaseline");
        callBean.setVersion("v2");
        callBean.setOperationName("testParameterStylesQA");
       
        Map<String, String> headerParams = new HashMap<String, String>();
        headerParams.put("headerParam", "Foo");
        callBean.setHeaderParams(headerParams);
       
        Map<String, String> queryParams = new HashMap<String, String>();
        String queryParameter = "queryParameter-" + identifier + "-" + i;
        queryParams.put("queryParam", queryParameter);
        String dateQueryParameter = "2009-06-01T13:50:00.0Z";
        queryParams.put("dateQueryParam", dateQueryParameter);
        callBean.setQueryParams(queryParams);
       
       
        httpCallBeans.add(callBean);
             
        Map<String, String> acceptProtocols = new HashMap<String,String>();
        switch (responseContentTypeEnum) {
        case JSON:
          acceptProtocols.put("application/json", "");
          break;
        case XML:
          acceptProtocols.put("application/xml", "");
          break;
        }
        callBean.setAcceptProtocols(acceptProtocols);
       
        //Store expected responses
        HttpResponseBean responseBean = new HttpResponseBean();
        String responseXmlString = "<SimpleResponse><message>headerParam=Foo,queryParam=" + queryParameter + ",dateQueryParam=Mon Jun 01 13:50:00 UTC 2009</message></SimpleResponse>";
        Document responseBaseObject = xHelpers.getXMLObjectFromString(responseXmlString);
        Map<CougarMessageProtocolRequestTypeEnum, Object> builtExpectedResponse = cougarManager.convertResponseToRestTypes(responseBaseObject, callBean);
        switch (responseContentTypeEnum) {
        case XML:
          responseBean.setResponseObject(builtExpectedResponse.get(CougarMessageProtocolRequestTypeEnum.RESTXML));
          break;
        case JSON:
          responseBean.setResponseObject(builtExpectedResponse.get(CougarMessageProtocolRequestTypeEnum.RESTJSON));
          break;
        }
        responseBean.setHttpStatusCode(OK_STATUS_CODE);
        responseBean.setHttpStatusText("OK");
 
        expectedResponses.put(identifier + RESPONSE + i, responseBean);
      }
    }
   
    public void makeCalls() {
      //Make the calls
      int loopCounter = 0;
      for(HttpCallBean callBean: httpCallBeans) {
        Date time = new Date();       
        expectedRequestTimes.put(identifier + RESPONSE + loopCounter, new Timestamp(time.getTime()));
        cougarManager.makeRestCougarHTTPCall(callBean, requestProtocolTypeEnum);
        loopCounter++;
      }
     
     
      //Get actual responses
      loopCounter=0;
      for (HttpCallBean httpCallBean: httpCallBeans) {
        HttpResponseBean responseBean = httpCallBean.getResponseObjectsByEnum(CougarMessageProtocolResponseTypeEnum.REST);
        responseBean.setResponseHeaders(null);
        actualResponses.put(identifier + RESPONSE + loopCounter, responseBean);
        loopCounter++;
      }
     
      //Set the expected response time
      for (String keyString: expectedResponses.keySet()) {
        HttpResponseBean responseBean = expectedResponses.get(keyString);
        Timestamp requestTime = expectedRequestTimes.get(keyString);
        responseBean.setRequestTime(requestTime);
        responseBean.setResponseTime(requestTime);
      }
     
    }

    public Map<String, HttpResponseBean> getActualResponses() {
      return actualResponses;
    }

    public void setActualResponses(Map<String, HttpResponseBean> actualResponses) {
      this.actualResponses = actualResponses;
    }

    public Map<String, HttpResponseBean> getExpectedResponses() {
      return expectedResponses;
    }

    public void setExpectedResponses(Map<String, HttpResponseBean> expectedResponses) {
      this.expectedResponses = expectedResponses;
    }

    public int getNumberOfRequests() {
      return numberOfRequests;
    }

    public void setNumberOfRequests(int numberOfRequests) {
      this.numberOfRequests = numberOfRequests;
    }
  }
 
 
 
  public class ComplexOperationExecutor extends Executor {
   
    public ComplexOperationExecutor(String identifier) {
      this.identifier = identifier;
    }
 
    private XMLHelpers xHelpers = new XMLHelpers();
    private CougarManager cougarManager = CougarManager.getInstance();
   
    private String identifier;
    private int numberOfRequests;
    private CougarMessageProtocolRequestTypeEnum requestProtocolTypeEnum;

    private Map<String, HttpResponseBean> expectedResponses = new LinkedHashMap<String, HttpResponseBean>();
    private Map<String, HttpResponseBean> actualResponses = new LinkedHashMap<String, HttpResponseBean>();
    private List<HttpCallBean> httpCallBeans = new ArrayList<HttpCallBean>();
    private Map<String, Timestamp> expectedRequestTimes = new LinkedHashMap<String, Timestamp>();
   
    public CougarMessageProtocolRequestTypeEnum getRequestProtocolTypeEnum() {
      return requestProtocolTypeEnum;
    }

    public void setRequestProtocolTypeEnum(
        CougarMessageProtocolRequestTypeEnum requestProtocolTypeEnum) {
      this.requestProtocolTypeEnum = requestProtocolTypeEnum;
    }

    public void run() {
      this.makeCalls();
    }
   
    public void buildCalls(CougarMessageContentTypeEnum responseContentTypeEnum) {
     
      for (int i = 0; i < numberOfRequests+1; i++) {
        //Setup call beans
        HttpCallBean callBean = new HttpCallBean();
        callBean.setServiceName("baseline","cougarBaseline");
        callBean.setVersion("v2");
        callBean.setOperationName("testComplexMutator","complex");
             
        Map<String, String> acceptProtocols = new HashMap<String,String>();
        switch (responseContentTypeEnum) {
        case JSON:
          acceptProtocols.put("application/json", "");
          break;
        case XML:
          acceptProtocols.put("application/xml", "");
          break;
        }
        callBean.setAcceptProtocols(acceptProtocols);
       
        String requestXmlString = "";
        requestXmlString = "<message><name>sum</name><value1> " + i + "</value1><value2>" + i + "</value2></message>";
        Document requestDocument = xHelpers.getXMLObjectFromString(requestXmlString);
        callBean.setRestPostQueryObjects(requestDocument);
        httpCallBeans.add(callBean);
       
        //Store expected responses
        HttpResponseBean responseBean = new HttpResponseBean();
        String responseXmlString = "<SimpleResponse><message>sum = " + i*2 + "</message></SimpleResponse>";
        Document responseBaseObject = xHelpers.getXMLObjectFromString(responseXmlString);
        Map<CougarMessageProtocolRequestTypeEnum, Object> builtExpectedResponse = cougarManager.convertResponseToRestTypes(responseBaseObject, callBean);
        switch (responseContentTypeEnum) {
        case XML:
          responseBean.setResponseObject(builtExpectedResponse.get(CougarMessageProtocolRequestTypeEnum.RESTXML));
          break;
        case JSON:
          responseBean.setResponseObject(builtExpectedResponse.get(CougarMessageProtocolRequestTypeEnum.RESTJSON));
          break;
        }
        responseBean.setHttpStatusCode(OK_STATUS_CODE);
        responseBean.setHttpStatusText("OK");
 
        expectedResponses.put(identifier + RESPONSE + i, responseBean);
      }
    }
   
    public void makeCalls() {
      //Make the calls
      int loopCounter = 0;
      for(HttpCallBean callBean: httpCallBeans) {
        Date time = new Date();       
        expectedRequestTimes.put(identifier + RESPONSE + loopCounter, new Timestamp(time.getTime()));
        cougarManager.makeRestCougarHTTPCall(callBean, requestProtocolTypeEnum);
        loopCounter++;
      }
     
     
      //Get actual responses
      loopCounter=0;
      for (HttpCallBean httpCallBean: httpCallBeans) {
        HttpResponseBean responseBean = httpCallBean.getResponseObjectsByEnum(CougarMessageProtocolResponseTypeEnum.REST);
        responseBean.setResponseHeaders(null);
        actualResponses.put(identifier + RESPONSE + loopCounter, responseBean);
        loopCounter++;
      }
     
      //Set the expected response time
      for (String keyString: expectedResponses.keySet()) {
        HttpResponseBean responseBean = expectedResponses.get(keyString);
        Timestamp requestTime = expectedRequestTimes.get(keyString);
        responseBean.setRequestTime(requestTime);
        responseBean.setResponseTime(requestTime);
      }
     
    }

    public Map<String, HttpResponseBean> getActualResponses() {
      return actualResponses;
    }

    public void setActualResponses(Map<String, HttpResponseBean> actualResponses) {
      this.actualResponses = actualResponses;
    }

    public Map<String, HttpResponseBean> getExpectedResponses() {
      return expectedResponses;
    }

    public void setExpectedResponses(Map<String, HttpResponseBean> expectedResponses) {
      this.expectedResponses = expectedResponses;
    }

    public int getNumberOfRequests() {
      return numberOfRequests;
    }

    public void setNumberOfRequests(int numberOfRequests) {
      this.numberOfRequests = numberOfRequests;
    }
  }
 
  public static class RestConcurrentRequestsAcrossMultipleOperationsTestResultBean {
   
    private Map<String, HttpResponseBean> expectedResponses = new LinkedHashMap<String, HttpResponseBean>();
    private Map<String, HttpResponseBean> actualResponses = new LinkedHashMap<String, HttpResponseBean>();
   
    public Map<String, HttpResponseBean> getActualResponses() {
      return actualResponses;
    }
    public void setActualResponses(Map<String, HttpResponseBean> actualResponses) {
      this.actualResponses = actualResponses;
    }
    public Map<String, HttpResponseBean> getExpectedResponses() {
      return expectedResponses;
    }
    public void setExpectedResponses(Map<String, HttpResponseBean> expectedResponses) {
      this.expectedResponses = expectedResponses;
    }
   
  }
 
 
}
  
TOP

Related Classes of com.betfair.cougar.testing.concurrency.RestConcurrentRequestsAcrossMultipleOperationsJETTTest$RestConcurrentRequestsAcrossMultipleOperationsTestResultBean

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.