/* * Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved. * * WSO2 Inc. licenses this file to you 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 org.wso2.carbon.databridge.agent.test.thrift; import junit.framework.Assert; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.wso2.carbon.databridge.agent.AgentHolder; import org.wso2.carbon.databridge.agent.DataPublisher; import org.wso2.carbon.databridge.agent.exception.DataEndpointAgentConfigurationException; import org.wso2.carbon.databridge.agent.exception.DataEndpointAuthenticationException; import org.wso2.carbon.databridge.agent.exception.DataEndpointConfigurationException; import org.wso2.carbon.databridge.agent.exception.DataEndpointException; import org.wso2.carbon.databridge.agent.test.DataPublisherTestUtil; import org.wso2.carbon.databridge.commons.Event; import org.wso2.carbon.databridge.commons.exception.MalformedStreamDefinitionException; import org.wso2.carbon.databridge.commons.exception.TransportException; import org.wso2.carbon.databridge.commons.utils.DataBridgeCommonsUtils; import org.wso2.carbon.databridge.core.exception.DataBridgeException; import org.wso2.carbon.databridge.core.exception.StreamDefinitionStoreException; import java.net.SocketException; public class ServerOfflineSyncThriftTest { private static final String STREAM_NAME = "org.wso2.esb.MediatorStatistics"; private static final String VERSION = "1.0.0"; private String agentConfigFileName = "sync-data-agent-config.xml"; private static final String STREAM_DEFN = "{" + " 'name':'" + STREAM_NAME + "'," + " 'version':'" + VERSION + "'," + " 'nickName': 'Stock Quote Information'," + " 'description': 'Some Desc'," + " 'tags':['foo', 'bar']," + " 'metaData':[" + " {'name':'ipAdd','type':'STRING'}" + " ]," + " 'payloadData':[" + " {'name':'symbol','type':'STRING'}," + " {'name':'price','type':'DOUBLE'}," + " {'name':'volume','type':'INT'}," + " {'name':'max','type':'DOUBLE'}," + " {'name':'min','type':'Double'}" + " ]" + "}"; private ThriftTestServer thriftTestServer; @BeforeClass public static void init() { DataPublisherTestUtil.setKeyStoreParams(); DataPublisherTestUtil.setTrustStoreParams(); } @AfterClass public static void shop() throws DataEndpointAuthenticationException, DataEndpointAgentConfigurationException, TransportException, DataEndpointException, DataEndpointConfigurationException { DataPublisher dataPublisher = new DataPublisher("tcp://localhost:8612", "admin", "admin"); dataPublisher.shutdownWithAgent(); } @Test public void testSendingEventsWhileServerOffline() throws DataEndpointAuthenticationException, DataEndpointAgentConfigurationException, TransportException, DataEndpointException, DataEndpointConfigurationException, SocketException { AgentHolder.setConfigPath(DataPublisherTestUtil.getDataAgentConfigPath(agentConfigFileName)); String hostName = DataPublisherTestUtil.LOCAL_HOST; DataPublisher dataPublisher = new DataPublisher("tcp://" + hostName + ":8612", "admin", "admin"); Event event = new Event(); event.setStreamId(DataBridgeCommonsUtils.generateStreamId(STREAM_NAME, VERSION)); event.setMetaData(new Object[]{"127.0.0.1"}); event.setCorrelationData(null); event.setPayloadData(new Object[]{"WSO2", 123.4, 2, 12.4, 1.3}); int numberOfEventsSent = 10; for (int i = 0; i < numberOfEventsSent; i++) { dataPublisher.tryPublish(event, 5); } try { Thread.sleep(2000); } catch (InterruptedException e) { } dataPublisher.shutdown(); try { Thread.sleep(2000); } catch (InterruptedException e) { } } @Test public void testBlockingEventSendingAndServerStartup() throws DataEndpointAuthenticationException, DataEndpointAgentConfigurationException, TransportException, DataEndpointException, DataEndpointConfigurationException, MalformedStreamDefinitionException, DataBridgeException, StreamDefinitionStoreException, SocketException { DataPublisherTestUtil.setKeyStoreParams(); DataPublisherTestUtil.setTrustStoreParams(); AgentHolder.setConfigPath(DataPublisherTestUtil.getDataAgentConfigPath(agentConfigFileName)); String hostName = DataPublisherTestUtil.LOCAL_HOST; DataPublisher dataPublisher = new DataPublisher("tcp://" + hostName + ":7642", "admin", "admin"); Event event = new Event(); event.setStreamId(DataBridgeCommonsUtils.generateStreamId(STREAM_NAME, VERSION)); event.setMetaData(new Object[]{"127.0.0.1"}); event.setCorrelationData(null); event.setPayloadData(new Object[]{"WSO2", 123.4, 2, 12.4, 1.3}); thriftTestServer = new ThriftTestServer(); thriftTestServer.addStreamDefinition(STREAM_DEFN, -1234); thriftTestServer.stopAndStartDuration(7642, 4000, 1000); DataPublisherTestUtil.setKeyStoreParams(); DataPublisherTestUtil.setTrustStoreParams(); try { Thread.sleep(1000); } catch (InterruptedException e) { } int queueSize = AgentHolder.getInstance().getDataEndpointAgent("Thrift"). getAgentConfiguration().getQueueSize(); int numberOfEventsSent = queueSize + 1000; for (int i = 0; i < numberOfEventsSent; i++) { dataPublisher.publish(event); } try { Thread.sleep(14000); } catch (InterruptedException e) { } Assert.assertEquals(queueSize + 1000, thriftTestServer.getNumberOfEventsReceived()); dataPublisher.shutdown(); thriftTestServer.stop(); try { Thread.sleep(2000); } catch (InterruptedException e) { } } @Test public void testNonBlockingEventSendingAndServerStartup() throws DataEndpointAuthenticationException, DataEndpointAgentConfigurationException, TransportException, DataEndpointException, DataEndpointConfigurationException, MalformedStreamDefinitionException, DataBridgeException, StreamDefinitionStoreException, SocketException { AgentHolder.setConfigPath(DataPublisherTestUtil.getDataAgentConfigPath(agentConfigFileName)); String hostName = DataPublisherTestUtil.LOCAL_HOST; DataPublisher dataPublisher = new DataPublisher("tcp://" + hostName + ":7652", "admin", "admin"); Event event = new Event(); event.setStreamId(DataBridgeCommonsUtils.generateStreamId(STREAM_NAME, VERSION)); event.setMetaData(new Object[]{"127.0.0.1"}); event.setCorrelationData(null); event.setPayloadData(new Object[]{"WSO2", 123.4, 2, 12.4, 1.3}); thriftTestServer = new ThriftTestServer(); thriftTestServer.addStreamDefinition(STREAM_DEFN, -1234); thriftTestServer.stopAndStartDuration(7652, 7000, 1000); DataPublisherTestUtil.setKeyStoreParams(); DataPublisherTestUtil.setTrustStoreParams(); int queueSize = AgentHolder.getInstance().getDataEndpointAgent("Thrift"). getAgentConfiguration().getQueueSize(); int numberOfEventsSent = queueSize + 1000; for (int i = 0; i < numberOfEventsSent; i++) { dataPublisher.tryPublish(event); } try { Thread.sleep(18000); } catch (InterruptedException e) { } Assert.assertEquals(0, thriftTestServer.getNumberOfEventsReceived()); dataPublisher.shutdown(); thriftTestServer.stop(); try { Thread.sleep(2000); } catch (InterruptedException e) { } } // public void testServerShutDownWhileBlockingPublishing() throws SocketException, // DataEndpointAuthenticationException, DataEndpointAgentConfigurationException, // TransportException, DataEndpointException, DataEndpointConfigurationException, // MalformedStreamDefinitionException, DataBridgeException, StreamDefinitionStoreException { // AgentHolder.setConfigPath(DataPublisherTestUtil.getDataAgentConfigPath()); // String hostName = DataPublisherTestUtil.LOCAL_HOST; // // startServer(7641); // // DataPublisher dataPublisher = new DataPublisher("tcp://" + hostName + ":7641", // "ssl://" + hostName + ":7741", "admin", "admin"); // Event event = new Event(); // event.setStreamId(DataBridgeCommonsUtils.generateStreamId(STREAM_NAME, VERSION)); // event.setMetaData(new Object[]{"127.0.0.1"}); // event.setCorrelationData(null); // event.setPayloadData(new Object[]{"WSO2", 123.4, 2, 12.4, 1.3}); // // int publishTime = 20000; // // thriftTestServer.stopAndStartDuration(7641, 5000, 60000); // long startTime = System.currentTimeMillis(); // // int eventsPublished = 0; // while (true) { // eventsPublished++; // dataPublisher.publish(event); // if (System.currentTimeMillis() >= startTime + publishTime) { // break; // } // } // // try { // Thread.sleep(2000); // } catch (InterruptedException e) { // } // Assert.assertEquals(thriftTestServer.getNumberOfEventsReceived(), eventsPublished); // thriftTestServer.stop(); // } }