/* * 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.testing.utils.cougar.manager; import com.betfair.testing.utils.cougar.beans.HttpCallBean; import com.betfair.testing.utils.cougar.callmaker.AbstractCallMaker; import com.betfair.testing.utils.cougar.callmaker.*; import com.betfair.testing.utils.cougar.enums.*; import com.betfair.testing.utils.cougar.helpers.CougarHelpers; import org.apache.http.Header; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.entity.StringEntity; import org.junit.Test; import org.junit.runner.RunWith; import org.w3c.dom.Document; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import java.io.IOException; import java.io.InputStream; import java.io.StringReader; import java.util.HashMap; import java.util.List; import java.util.Map; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; public class CougarManagerTest { private CougarManager cougarManager = CougarManager.getInstance(); private CougarHelpers cougarHelpers = new CougarHelpers(); private CougarTestDAO cougarTestDAO = new CougarTestDAO(); public CougarManagerTest() { cougarHelpers.setCougarDAO(cougarTestDAO); cougarManager.setCougarHelpers(cougarHelpers); RestJSONCallMaker restJSONCallMaker = new RestJSONCallMaker(); restJSONCallMaker.setCougarHelpers(cougarHelpers); RestXMLCallMaker restXMLCallMaker = new RestXMLCallMaker(); restXMLCallMaker.setCougarHelpers(cougarHelpers); SoapCallMaker soapXMLCallMaker = new SoapCallMaker(); Map<CougarMessageProtocolRequestTypeEnum, AbstractCallMaker> requestBuilderMap = new HashMap<CougarMessageProtocolRequestTypeEnum, AbstractCallMaker>(); requestBuilderMap.put(CougarMessageProtocolRequestTypeEnum.RESTJSON, restJSONCallMaker); requestBuilderMap.put(CougarMessageProtocolRequestTypeEnum.RESTXML, restXMLCallMaker); requestBuilderMap.put(CougarMessageProtocolRequestTypeEnum.SOAP, soapXMLCallMaker); CallMakerFactory.setRequestBuilderMap(requestBuilderMap); } @Test public void sendPostRestRequest_Test() throws ParserConfigurationException, SAXException, IOException { String POSTQUERY = "<ComplexObject><name>sum</name><value1>7</value1><value2>75</value2></ComplexObject>"; //String expRestXMLRequestBody = "<ComplexObject xmlns=\"http://www.betfair.com/servicetypes/v2/Baseline/\"><name>sum</name><value1>7</value1><value2>75</value2></ComplexObject>"; String operationName = "someOperation"; String requestWrapper = "SomeOperationRequest"; String expRestXMLRequestBody = "<" + requestWrapper + " xmlns=\"http://www.betfair.com/servicetypes/v2/Baseline/\"><complexObject><name>sum</name><value1>7</value1><value2>75</value2></complexObject></" + requestWrapper + ">"; //String expRestJSONRequestBody = "{\"name\":\"sum\",\"value1\":7,\"value2\":75}" ; String expRestJSONRequestBody = "{\"complexObject\":{\"name\":\"sum\",\"value1\":7,\"value2\":75}}" ; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(new InputSource(new StringReader(POSTQUERY))); HttpCallBean httpCallBean = new HttpCallBean(); httpCallBean.setOperationName(operationName); httpCallBean.setServiceName("Baseline"); httpCallBean.setVersion("v2"); httpCallBean.setQueryParams(null); httpCallBean.setHeaderParams(null); httpCallBean.setRestPostQueryObjects(document); cougarManager.makeRestCougarHTTPCalls(httpCallBean); List<HttpUriRequest> methodsSent = cougarTestDAO.methods; HttpPost methodSent; methodSent = (HttpPost)methodsSent.get(0); assertNull( methodSent.getURI().getQuery()); assertEquals("/Baseline/v2/" + operationName, methodSent.getURI().getPath()); Header[] headers = methodSent.getAllHeaders(); assertEquals(4, headers.length); assertEquals("Content-Type: application/json", String.valueOf(headers[0])); assertEquals("User-Agent: java/socket", String.valueOf(headers[1])); assertEquals("Accept: application/json", String.valueOf(headers[2])); //Changed this from 37... //assertEquals("Content-Length: 55", String.valueOf(headers[3])); assertEquals("X-Forwarded-For: 87.248.113.14", String.valueOf(headers[3])); StringEntity stringRequestEntity = (StringEntity)methodSent.getEntity(); InputStream inputStream = stringRequestEntity.getContent(); byte[] buffer = new byte[inputStream.available()]; int offset=0; int read; while ((read=inputStream.read(buffer,offset,inputStream.available()))!=-1) { offset+=read; } assertEquals(expRestJSONRequestBody, new String(buffer,"UTF-8")); methodSent = (HttpPost)methodsSent.get(2); assertNull( methodSent.getURI().getQuery()); assertEquals("/Baseline/v2/" + operationName, methodSent.getURI().getPath()); headers = methodSent.getAllHeaders(); assertEquals(4, headers.length); stringRequestEntity = (StringEntity)methodSent.getEntity(); inputStream = stringRequestEntity.getContent(); buffer = new byte[inputStream.available()]; offset=0; while ((read=inputStream.read(buffer,offset,inputStream.available()))!=-1) { offset+=read; } assertEquals(expRestXMLRequestBody, new String(buffer,"UTF-8")); assertEquals("Content-Type: application/xml", String.valueOf(headers[0])); assertEquals("User-Agent: java/socket", String.valueOf(headers[1])); assertEquals("Accept: application/xml", String.valueOf(headers[2])); //assertEquals("Content-Length: 141", String.valueOf(headers[3])); //assertEquals("Content-Length: 186", String.valueOf(headers[3])); assertEquals("X-Forwarded-For: 87.248.113.14", String.valueOf(headers[3])); } @Test public void sendGetRestRequest_Test() throws ParserConfigurationException, SAXException, IOException { Document document = null; HttpCallBean httpCallBean = new HttpCallBean(); httpCallBean.setOperationName("complex"); httpCallBean.setServiceName("rest"); httpCallBean.setVersion("v2"); Map<String, String> queryParams = new HashMap<String, String>(); queryParams.put("queryParam", "qp1"); httpCallBean.setQueryParams(queryParams); HashMap<String, String> headerParams = new HashMap<String, String>(); headerParams.put("HeaderParam", "hp1"); httpCallBean.setHeaderParams(headerParams); httpCallBean.setRestPostQueryObjects(document); cougarManager.makeRestCougarHTTPCalls(httpCallBean); List<HttpUriRequest> methodsSent = cougarTestDAO.methods; HttpGet methodSent; methodSent = (HttpGet)methodsSent.get(0); assertEquals("queryParam=qp1", methodSent.getURI().getQuery()); assertEquals("/rest/v2/complex", methodSent.getURI().getPath()); Header[] headers = methodSent.getAllHeaders(); assertEquals(5, headers.length); assertEquals("Content-Type: application/json", String.valueOf(headers[0])); assertEquals("User-Agent: java/socket", String.valueOf(headers[1])); assertEquals("Accept: application/json", String.valueOf(headers[2])); assertEquals("HeaderParam: hp1", String.valueOf(headers[3])); assertEquals("X-Forwarded-For: 87.248.113.14", String.valueOf(headers[4])); methodSent = (HttpGet)methodsSent.get(2); assertEquals("queryParam=qp1", methodSent.getURI().getQuery()); assertEquals("/rest/v2/complex", methodSent.getURI().getPath()); headers = methodSent.getAllHeaders(); assertEquals(5, headers.length); assertEquals("Content-Type: application/xml", String.valueOf(headers[0])); assertEquals("User-Agent: java/socket", String.valueOf(headers[1])); assertEquals("Accept: application/xml", String.valueOf(headers[2])); assertEquals("HeaderParam: hp1", String.valueOf(headers[3])); assertEquals("X-Forwarded-For: 87.248.113.14", String.valueOf(headers[4])); } @Test public void sortMapArrayByServiceVersion_Test(){ Map<String,Object>[] mapArray = new HashMap[5]; int[] insertOrder = new int[]{3,1,4,0,2}; for(int i = 0; i < mapArray.length; i++){ Map<String, Object> map = new HashMap<String, Object>(); map.put("ServiceVersion", Double.valueOf(i)); map.put("Operation", "testSimpleGet"+i); mapArray[insertOrder[i]] = map; } mapArray = cougarManager.sortRequestLogEntriesByServiceVersion(mapArray); for(int i = 0; i < mapArray.length; i++){ assertEquals("testSimpleGet"+i, mapArray[i].get("Operation")); assertEquals(Double.valueOf(i), mapArray[i].get("ServiceVersion")); } } }