package org.addsimplicity.anicetus; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.util.Collection; import java.util.Iterator; import org.addsimplicity.anicetus.entity.CompletionStatus; import org.addsimplicity.anicetus.entity.ExecInfo; import org.addsimplicity.anicetus.entity.GlobalInfo; import org.addsimplicity.anicetus.entity.SubTypedInfo; import org.addsimplicity.anicetus.entity.TelemetryEvent; import org.addsimplicity.anicetus.entity.TelemetrySession; import org.addsimplicity.anicetus.entity.TelemetryState; import org.addsimplicity.anicetus.entity.TelemetryTransaction; import org.junit.Before; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; public class JMSTest { TelemetryContext m_mgr; ApplicationContext m_context; @Before public void init() { m_context = new ClassPathXmlApplicationContext( new String[] { "org/addsimplicity/anicetus/JMSTestBinding.xml" }); m_mgr = (TelemetryContext) m_context.getBean("manager"); } @Test public void testEventBeacon() throws Exception { SubTypedInfo ev = new TelemetryEvent(); ev.put("XYZZY", "Zork"); m_mgr.sendBeacon(ev); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetryEvent); SubTypedInfo recv = (SubTypedInfo) obj; assertEquals("Custom field", "Zork", recv.get("XYZZY")); assertNotNull("Host", recv.getReportingNode()); assertNotNull("Context", recv.getExecutionContext()); } @Test public void testSimpleSession() throws Exception { ExecInfo s = m_mgr.getSession(); try { Thread.sleep(5); } catch (InterruptedException ie) { ie.printStackTrace(); } s.setStatus(CompletionStatus.Success); m_mgr.endSession(); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetrySession); GlobalInfo rsess = (GlobalInfo) obj; assertEquals("EntityId", s.getEntityId(), rsess.getEntityId()); } @Test public void testStateBeacon() throws Exception { TelemetryState st = new TelemetryState(); st.put("XYZZY", "Zork"); m_mgr.sendBeacon(st); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetryState); TelemetryState recv = (TelemetryState) obj; assertEquals("Custom field", "Zork", recv.get("XYZZY")); assertNotNull("Host", recv.getReportingNode()); assertNotNull("Context", recv.getExecutionContext()); } @Test public void testStateNEvent() throws Exception { ExecInfo s = m_mgr.getSession(); m_mgr.newEvent("TestEvent"); m_mgr.newState(); s.setStatus(CompletionStatus.PartialSuccess); m_mgr.endSession(); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetrySession); ExecInfo rsess = (ExecInfo) obj; Collection<GlobalInfo> childs = rsess.getChildren(); assertEquals("Children", 2, childs.size()); Iterator<GlobalInfo> iter = childs.iterator(); GlobalInfo ch = iter.next(); assertTrue("Type", ch instanceof TelemetryEvent); ch = iter.next(); assertTrue("Type", ch instanceof TelemetryState); } @Test public void testTransaction() throws Exception { ExecInfo s = m_mgr.getSession(); TelemetryTransaction t = m_mgr.beginTransaction("test:uri"); String params[] = { "a", "b" }; t.setParameters(params); s.setStatus(CompletionStatus.PartialSuccess); m_mgr.endSession(); JmsTemplate tmpl = (JmsTemplate) m_context.getBean("consumeTempl"); Object obj = tmpl.receiveAndConvert(); assertNotNull("Object received", obj); assertTrue("Type", obj instanceof TelemetrySession); ExecInfo rsess = (ExecInfo) obj; assertEquals("Status", CompletionStatus.PartialSuccess, rsess.getStatus()); Collection<GlobalInfo> childs = rsess.getChildren(); assertEquals("Children", 1, childs.size()); Iterator<GlobalInfo> iter = childs.iterator(); GlobalInfo ch = iter.next(); assertTrue("Type", ch instanceof TelemetryTransaction); TelemetryTransaction rt = (TelemetryTransaction) ch; String p[] = (String[]) rt.getParameters(); assertEquals("Length", params.length, p.length); assertEquals("Parent", rsess.getEntityId(), rt.getParentId()); } }