| /******************************************************************************* |
| * Copyright (c) 2013 Boeing. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Boeing - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ote.bytemessage; |
| |
| import org.eclipse.ote.services.core.ServiceUtility; |
| import org.junit.Assert; |
| import org.junit.Before; |
| import org.junit.Test; |
| import org.osgi.framework.Bundle; |
| import org.osgi.framework.BundleException; |
| import org.osgi.framework.ServiceRegistration; |
| import org.osgi.service.event.EventAdmin; |
| import org.osgi.service.event.EventHandler; |
| |
| public class OteByteMessageSceneriosTest { |
| |
| private OteSendByteMessage sender; |
| |
| @Before |
| public void setup(){ |
| for(Bundle bundle:ServiceUtility.getContext().getBundles()){ |
| try { |
| bundle.start(); |
| } catch (BundleException e) { |
| } |
| } |
| EventAdmin eventAdmin = ServiceUtility.getService(EventAdmin.class); |
| sender = new OteSendByteMessage(eventAdmin); |
| } |
| |
| @Test |
| public void testSynchSendNoResponse() throws Exception { |
| OteByteMessage msg = new SampleNoResponse(); |
| OteByteMessageResponse response; |
| try{ |
| response = sender.synchSendAndResponse(OteByteMessageResponse.class, msg, 0); |
| Assert.assertTrue("failed to throw exception when no response topic specified", false); |
| } catch (Exception ex){ |
| } |
| long current = System.currentTimeMillis(); |
| msg.getHeader().RESPONSE_TOPIC.setValue("nothingtoseehere"); |
| response = sender.synchSendAndResponse(OteByteMessageResponse.class, msg, 100); |
| System.out.println((System.currentTimeMillis() - current)); |
| Assert.assertTrue((System.currentTimeMillis() - current) >= 95); |
| Assert.assertNull(response); |
| } |
| |
| @Test |
| public void testSynchSendResponse() throws Exception { |
| ServiceRegistration<EventHandler> reg = OteByteMessageUtil.subscribe(OteByteMessageSendMsg.TOPIC_VALUE, new RespondAfterWait(new OteByteMessageResponse(), 100)); |
| try{ |
| OteByteMessageSendMsg msg = new OteByteMessageSendMsg(); |
| msg.getHeader().RESPONSE_TOPIC.setValue(OteByteMessageResponse.TOPIC_VALUE); |
| msg.getHeader().MESSAGE_SEQUENCE_NUMBER.setValue(665); |
| |
| |
| long current = System.currentTimeMillis(); |
| OteByteMessageResponse response = sender.synchSendAndResponse(OteByteMessageResponse.class, msg, 150); |
| Assert.assertNotNull(response); |
| long responseTime = System.currentTimeMillis() - current; |
| System.out.println(responseTime); |
| Assert.assertEquals(666, response.getHeader().RESPONSE_ID.getValue().intValue()); |
| Assert.assertEquals("ote/response", response.getHeader().TOPIC.getValue()); |
| Assert.assertTrue(String.format("responseTime[%d] expected > 95 && < 200", responseTime), responseTime > 95 && responseTime < 200); |
| } finally { |
| reg.unregister(); |
| } |
| } |
| |
| @Test |
| public void testSynchSendResponseTimeout() throws Exception { |
| RespondAfterWait respondAfterWait = new RespondAfterWait(new OteByteMessageResponse(), 300); |
| ServiceRegistration<EventHandler> reg = OteByteMessageUtil.subscribe(OteByteMessageSendMsg.TOPIC_VALUE, respondAfterWait); |
| try{ |
| OteByteMessageSendMsg msg = new OteByteMessageSendMsg(); |
| msg.getHeader().RESPONSE_TOPIC.setValue(OteByteMessageResponse.TOPIC_VALUE); |
| msg.getHeader().MESSAGE_SEQUENCE_NUMBER.setValue(665); |
| long current = System.currentTimeMillis(); |
| OteByteMessageResponse response = sender.synchSendAndResponse(OteByteMessageResponse.class, msg, 150); |
| Assert.assertNull(response); |
| long responseTime = System.currentTimeMillis() - current; |
| System.out.println(responseTime); |
| Assert.assertTrue(String.format("responseTime[%d] expected > 150 && < 200", responseTime), responseTime > 150 && responseTime < 200); |
| |
| } finally { |
| reg.unregister(); |
| respondAfterWait.cancel(); |
| } |
| } |
| |
| @Test |
| public void testAsynchSendNoResponse() { |
| RespondAfterWait respondAfterWait = new RespondAfterWait(new OteByteMessageResponse(), 300); |
| ServiceRegistration<EventHandler> reg = OteByteMessageUtil.subscribe(OteByteMessageSendMsg.TOPIC_VALUE, respondAfterWait); |
| try{ |
| OteByteMessageSendMsg msg = new OteByteMessageSendMsg(); |
| msg.getHeader().RESPONSE_TOPIC.setValue(OteByteMessageResponse.TOPIC_VALUE); |
| msg.getHeader().MESSAGE_SEQUENCE_NUMBER.setValue(12); |
| OteByteMessageCallable<OteByteMessageSendMsg, OteByteMessageResponse> callable = new OteByteMessageCallable<OteByteMessageSendMsg, OteByteMessageResponse>() { |
| @Override |
| public void timeout(OteByteMessageSendMsg transmitted) { |
| Assert.assertTrue(true); |
| System.out.println("got a good response 1"); |
| } |
| @Override |
| public void call(OteByteMessageSendMsg transmitted, OteByteMessageResponse recieved) { |
| System.out.println("I should have failed"); |
| Assert.assertTrue("should have timed out", false); |
| } |
| }; |
| |
| long time = System.currentTimeMillis(); |
| OteByteMessageFuture<OteByteMessageSendMsg, OteByteMessageResponse> result = sender.asynchSendAndResponse(OteByteMessageResponse.class, msg, callable, 100); |
| result.waitForCompletion(); |
| long elapsed = System.currentTimeMillis() - time; |
| System.out.println(elapsed); |
| Assert.assertTrue(!result.gotResponse()); |
| Assert.assertTrue(result.isTimedOut()); |
| }finally { |
| reg.unregister(); |
| respondAfterWait.cancel(); |
| } |
| } |
| |
| |
| @Test |
| public void testAsynchSendResponse() { |
| ServiceRegistration<EventHandler> reg = OteByteMessageUtil.subscribe(OteByteMessageSendMsg.TOPIC_VALUE, new RespondAfterWait(new OteByteMessageResponse(), 30)); |
| try{ |
| OteByteMessageSendMsg msg = new OteByteMessageSendMsg(); |
| msg.getHeader().RESPONSE_TOPIC.setValue(OteByteMessageResponse.TOPIC_VALUE); |
| msg.getHeader().MESSAGE_SEQUENCE_NUMBER.setValue(12); |
| OteByteMessageCallable<OteByteMessageSendMsg, OteByteMessageResponse> callable = new OteByteMessageCallable<OteByteMessageSendMsg, OteByteMessageResponse>() { |
| @Override |
| public void timeout(OteByteMessageSendMsg transmitted) { |
| Assert.fail("should not have timed out"); |
| } |
| @Override |
| public void call(OteByteMessageSendMsg transmitted, OteByteMessageResponse recieved) { |
| Assert.assertNotNull(recieved); |
| Assert.assertEquals(13, recieved.getHeader().RESPONSE_ID.getValue().intValue()); |
| System.out.println("got a good response 222"); |
| } |
| }; |
| |
| long time = System.currentTimeMillis(); |
| OteByteMessageFuture<OteByteMessageSendMsg, OteByteMessageResponse> result = sender.asynchSendAndResponse(OteByteMessageResponse.class, msg, callable, 100); |
| result.waitForCompletion(); |
| long elapsed = System.currentTimeMillis() - time; |
| System.out.println(elapsed); |
| Assert.assertTrue(result.gotResponse()); |
| Assert.assertTrue(!result.isTimedOut()); |
| } finally { |
| reg.unregister(); |
| } |
| } |
| |
| |
| } |