/* * 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.platform.application; import com.betfair.baseline.v2.BaselineSyncClient; import com.betfair.baseline.v2.enumerations.SomeComplexObjectEnumParameterEnum; import com.betfair.baseline.v2.exception.SimpleException; import com.betfair.baseline.v2.to.*; import com.betfair.cougar.api.LogExtension; import com.betfair.cougar.api.LoggableEvent; import com.betfair.cougar.api.RequestContext; import com.betfair.cougar.api.RequestUUID; import com.betfair.cougar.api.fault.CougarApplicationException; import com.betfair.cougar.api.geolocation.GeoLocationDetails; import com.betfair.cougar.api.security.IdentityChain; import com.betfair.cougar.core.api.ev.ExecutionObserver; import com.betfair.cougar.core.api.ev.ExecutionResult; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextRefreshedEvent; import java.io.UnsupportedEncodingException; import java.net.InetAddress; import java.net.UnknownHostException; import java.util.*; import java.util.concurrent.TimeoutException; import java.util.logging.Level; /** * Very basic class to test remote connectivity for client cougar to cougar calculation */ public class CougarToCougarCommsTester implements ApplicationListener { private final static Logger LOGGER = LoggerFactory.getLogger(CougarToCougarCommsTester.class); private BaselineSyncClient client; private RequestContext ctx = new RequestContext() { private GeoLocationDetails geoDetails; @Override public GeoLocationDetails getLocation() { if (geoDetails == null) { try { final List<String> thisAddress = Collections.singletonList(InetAddress.getLocalHost().getHostAddress()); geoDetails = new GeoLocationDetails() { @Override public String getCountry() { return "UK"; } @Override public String getLocation() { return null; } @Override public String getInferredCountry() { return null; } @Override public String getRemoteAddr() { return thisAddress.get(0); } @Override public List<String> getResolvedAddresses() { return thisAddress; } @Override public boolean isLowConfidenceGeoLocation() { return false; } }; } catch (UnknownHostException ignored) {} //unecessary checked exception. wicked } return geoDetails; } @Override public void trace(String msg, Object... args) { } @Override public void addEventLogRecord(LoggableEvent record) { } @Override public void setRequestLogExtension(LogExtension extension) { } @Override public void setConnectedObjectLogExtension(LogExtension extension) { } @Override public LogExtension getConnectedObjectLogExtension() { return null; } @Override public IdentityChain getIdentity() { return null; } @Override public RequestUUID getRequestUUID() { return null; } @Override public Date getReceivedTime() { return null; } @Override public Date getRequestTime() { return null; } @Override public boolean traceLoggingEnabled() { return false; } @Override public int getTransportSecurityStrengthFactor() { return 0; } @Override public boolean isTransportSecure() { return false; } }; private ExecutionObserver obs = new ExecutionObserver() { @Override public void onResult(ExecutionResult result) { LOGGER.info("Result received: [" + result.getResult().toString() + "]"); } }; private ExecutionObserver byteObs = new ExecutionObserver() { @Override public void onResult(ExecutionResult executionResult) { ByteOperationResponseObject obj = ((ByteOperationResponseObject)executionResult.getResult()); String result = null; try { result = new String(obj.getBodyParameter(), "utf-8"); } catch (UnsupportedEncodingException e) { } System.out.println(result); } }; private ExecutionObserver voidObs = new ExecutionObserver() { @Override public void onResult(ExecutionResult result) { LOGGER.info("Void result received this valid here should be null [" + result.getResult() + "]"); } }; public void onApplicationEvent(ApplicationEvent event) { if (event instanceof ContextRefreshedEvent) { System.out.println(new Date() + ": SIMPLE TEST:"); simple(); System.out.println(new Date() + ": SIMPLE DONE"); System.out.println(new Date() + ": SIMPLE TEST:"); timeout(); System.out.println(new Date() + ": SIMPLE DONE"); System.out.println(new Date() + ": ASYNC TEST:"); async(); System.out.println(new Date() + ": ASYNC DONE"); System.out.println(new Date() + ": EXCEPTION TEST:"); exception(); System.out.println(new Date() + ": EXCEPTION DONE"); System.out.println("SIMPLE TEST:"); run(); try {Thread.sleep(15000); } catch (InterruptedException e) {}; System.out.println("MT TEST:"); multithreadedInstanceTest(); } } public void simple() { try { String mesasge = getClient().testSimpleGet(ctx, "client foo").getMessage(); System.out.println("testSimpleGet() returned "+ mesasge); } catch (Exception ex) { System.err.println("EXCEPTION RECEIVED: " + ex.getMessage()); ex.printStackTrace(); } } public void timeout() { try { getClient().testSleep(ctx, 2000L, 1000L); } catch (InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (TimeoutException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (SimpleException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } } public void async() { try { // getClient().testSleep(ctx, 1000L); System.out.println("testGetTimeout() returned"); } catch (Exception ex) { System.err.println("EXCEPTION RECEIVED: " + ex.getMessage()); ex.printStackTrace(); } } public void exception() { try { getClient().testException(ctx, "Unauthorised", "SUSPENDED"); } catch (CougarApplicationException cax) { System.out.println("Expected Application Exception: " + cax.getExceptionCode()+", responseCode: "+ cax.getResponseCode()); } catch (Exception ex) { System.err.println("EXCEPTION RECEIVED: " + ex.getMessage()); ex.printStackTrace(); } } public void run() { try { System.out.println("testSimpleGet() returned "+getClient().testSimpleGet(ctx, "FORWARD:foo").getMessage()); SomeComplexObject sco = new SomeComplexObject(); sco.setDateTimeParameter(new Date()); sco.setEnumParameter(SomeComplexObjectEnumParameterEnum.BAR); sco.setListParameter(new ArrayList<String>() {{ add("bob"); }}); sco.setStringParameter("Foo"); Map<String,SomeComplexObject> m = new HashMap<String, SomeComplexObject>(); m.put("wibble", sco); BodyParamComplexMapObject obj = new BodyParamComplexMapObject(); obj.setComplexMap(m); ComplexMapOperationResponseObject response = getClient().complexMapOperation(ctx, obj); System.out.println(response); } catch (Exception ex) { System.err.println("EXCEPTION RECEIVED: "); ex.printStackTrace(); } } public void multithreadedInstanceTest() { for (int i=0; i<10; i++) { final String parrot = String.valueOf(i); Thread t = new Thread(new Runnable() { @Override public void run() { final String expected = parrot; try { while (true) { long time = System.currentTimeMillis(); SimpleResponse response = getClient().testSimpleGet(ctx, parrot); System.out.println("MT response: "+ response); if (!response.getMessage().equals(expected)) { System.out.println("WTF!"); // } else { // System.out.println(expected+ ": Response returned in: " + (System.currentTimeMillis() - time) + "ms"); } // Thread.sleep(50); } } catch (SimpleException e) { LOGGER.error("An exception occurred", e); // } catch (InterruptedException e) { // LOGGER.error("An exception occurred", e); } } }, "ARSE-"+i); t.start(); } } public BaselineSyncClient getClient() { return client; } public void setClient(BaselineSyncClient client) { this.client = client; } }