/* * Copyright (C) 2013-2014 Sony Computer Science Laboratories, Inc. All Rights Reserved. * Copyright (C) 2014 Sony Corporation. All Rights Reserved. */ package com.sonycsl.test.util; import com.sonycsl.wamp.WampError; import com.sonycsl.wamp.WampPeer; import com.sonycsl.wamp.message.WampMessage; import com.sonycsl.wamp.message.WampMessageFactory; import com.sonycsl.wamp.message.WampMessageType; import com.sonycsl.wamp.util.WampRequestIdGenerator; import junit.framework.TestCase; import org.json.JSONObject; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; public final class WampTestUtil { public static WampMessage transmitMessage(WampPeer requester, WampMessage request, WampPeer responder, int responseType) { TestableCallback reqCallback = new TestableCallback(); TestableCallback resCallback = new TestableCallback(); reqCallback.setTargetMessageType(responseType, new CountDownLatch(1)); resCallback.setTargetMessageType(request.getMessageType(), new CountDownLatch(1)); requester.setCallback(reqCallback); responder.setCallback(resCallback); requester.transmit(request); try { TestCase.assertTrue(resCallback.await(1, TimeUnit.SECONDS)); } catch (InterruptedException e) { TestCase.fail(); } TestCase.assertEquals(request, resCallback.getTargetMessage()); try { TestCase.assertTrue(reqCallback.await(1, TimeUnit.SECONDS)); } catch (InterruptedException e) { TestCase.fail(); } requester.removeCallback(reqCallback); responder.removeCallback(resCallback); return reqCallback.getTargetMessage(); } public static WampMessage transmitHello(WampPeer requester, String realm, WampPeer responder) { return transmitMessage(requester, WampMessageFactory.createHello(realm, new JSONObject()), responder, WampMessageType.WELCOME); } public static void transmitHelloSuccess(WampPeer requester, String realm, WampPeer responder) { WampMessage msg = transmitHello(requester, realm, responder); TestCase.assertTrue(msg.toString(), msg.isWelcomeMessage()); } public static WampMessage transmitGoodbye(WampPeer requester, String reason, WampPeer responder) { return transmitMessage(requester, WampMessageFactory.createGoodbye(new JSONObject(), reason), responder, WampMessageType.GOODBYE); } public static void transmitGoodbyeSuccess(WampPeer requester, String reason, WampPeer responder) { WampMessage reply = transmitGoodbye(requester, reason, responder); TestCase.assertTrue(reply.toString(), reply.isGoodbyeMessage()); TestCase.assertEquals(WampError.GOODBYE_AND_OUT, reply.asGoodbyeMessage().getReason()); } public static WampMessage transmitSubscribe(WampPeer requester, String topic, WampPeer responder) { return transmitMessage(requester, WampMessageFactory.createSubscribe( WampRequestIdGenerator.getId(), new JSONObject(), topic), responder, WampMessageType.SUBSCRIBED); } public static int transmitSubscribeSuccess(WampPeer requester, String topic, WampPeer responder) { WampMessage msg = transmitSubscribe(requester, topic, responder); TestCase.assertTrue(msg.toString(), msg.isSubscribedMessage()); return msg.asSubscribedMessage().getSubscriptionId(); } }