/* * 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 org.apache.log4j.Logger; import org.wso2.carbon.databridge.agent.test.DataPublisherTestUtil; import org.wso2.carbon.databridge.commons.Credentials; import org.wso2.carbon.databridge.commons.Event; import org.wso2.carbon.databridge.commons.StreamDefinition; import org.wso2.carbon.databridge.commons.exception.MalformedStreamDefinitionException; import org.wso2.carbon.databridge.commons.utils.EventDefinitionConverterUtils; import org.wso2.carbon.databridge.core.AgentCallback; import org.wso2.carbon.databridge.core.DataBridge; import org.wso2.carbon.databridge.core.Utils.AgentSession; import org.wso2.carbon.databridge.core.definitionstore.InMemoryStreamDefinitionStore; import org.wso2.carbon.databridge.core.exception.DataBridgeException; import org.wso2.carbon.databridge.core.exception.StreamDefinitionStoreException; import org.wso2.carbon.databridge.core.internal.authentication.AuthenticationHandler; import org.wso2.carbon.databridge.receiver.thrift.ThriftDataReceiver; import org.wso2.carbon.user.api.UserStoreException; import java.net.SocketException; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; public class ThriftTestServer { Logger log = Logger.getLogger(ThriftTestServer.class); ThriftDataReceiver thriftDataReceiver; InMemoryStreamDefinitionStore streamDefinitionStore; AtomicInteger numberOfEventsReceived; RestarterThread restarterThread; public void startTestServer() throws DataBridgeException, InterruptedException { ThriftTestServer thriftTestServer = new ThriftTestServer(); thriftTestServer.start(7611); Thread.sleep(100000000); thriftTestServer.stop(); } public void addStreamDefinition(StreamDefinition streamDefinition, int tenantId) throws StreamDefinitionStoreException { streamDefinitionStore.saveStreamDefinitionToStore(streamDefinition, tenantId); } public void addStreamDefinition(String streamDefinitionStr, int tenantId) throws StreamDefinitionStoreException, MalformedStreamDefinitionException { StreamDefinition streamDefinition = EventDefinitionConverterUtils.convertFromJson(streamDefinitionStr); getStreamDefinitionStore().saveStreamDefinitionToStore(streamDefinition, tenantId); } private InMemoryStreamDefinitionStore getStreamDefinitionStore(){ if (streamDefinitionStore == null){ streamDefinitionStore = new InMemoryStreamDefinitionStore(); } return streamDefinitionStore; } public void start(int receiverPort) throws DataBridgeException { DataPublisherTestUtil.setKeyStoreParams(); streamDefinitionStore = getStreamDefinitionStore(); numberOfEventsReceived = new AtomicInteger(0); DataBridge databridge = new DataBridge(new AuthenticationHandler() { @Override public boolean authenticate(String userName, String password) { return true;// allays authenticate to true } @Override public String getTenantDomain(String userName) { return "admin"; } @Override public int getTenantId(String tenantDomain) throws UserStoreException { return -1234; } @Override public void initContext(AgentSession agentSession) { //To change body of implemented methods use File | Settings | File Templates. } @Override public void destroyContext(AgentSession agentSession) { } }, streamDefinitionStore, DataPublisherTestUtil.getDataBridgeConfigPath()); thriftDataReceiver = new ThriftDataReceiver(receiverPort, databridge); databridge.subscribe(new AgentCallback() { int totalSize = 0; public void definedStream(StreamDefinition streamDefinition, int tenantId) { log.info("StreamDefinition " + streamDefinition); } @Override public void removeStream(StreamDefinition streamDefinition, int tenantId) { log.info("StreamDefinition remove " + streamDefinition); } @Override public void receive(List<Event> eventList, Credentials credentials) { numberOfEventsReceived.addAndGet(eventList.size()); log.info("Received events : " + numberOfEventsReceived); // log.info("eventListSize=" + eventList.size() + " eventList " + eventList + " for username " + credentials.getUsername()); } }); String address = "localhost"; log.info("Test Server starting on " + address); thriftDataReceiver.start(address); log.info("Test Server Started"); } public int getNumberOfEventsReceived() { if(numberOfEventsReceived != null) return numberOfEventsReceived.get(); else return 0; } public void resetReceivedEvents() { numberOfEventsReceived.set(0); } public void stop() { thriftDataReceiver.stop(); log.info("Test Server Stopped"); } public void stopAndStartDuration(int port, long stopAfterTimeMilliSeconds, long startAfterTimeMS) throws SocketException, DataBridgeException { restarterThread = new RestarterThread(port, stopAfterTimeMilliSeconds, startAfterTimeMS); Thread thread = new Thread(restarterThread); thread.start(); } public int getEventsReceivedBeforeLastRestart() { return restarterThread.eventReceived; } class RestarterThread implements Runnable { int eventReceived; int port; long stopAfterTimeMilliSeconds; long startAfterTimeMS; RestarterThread(int port, long stopAfterTime, long startAfterTime) { this.port = port; stopAfterTimeMilliSeconds = stopAfterTime; startAfterTimeMS = startAfterTime; } @Override public void run() { try { Thread.sleep(stopAfterTimeMilliSeconds); } catch (InterruptedException e) { } if (thriftDataReceiver != null) thriftDataReceiver.stop(); eventReceived = getNumberOfEventsReceived(); log.info("Number of events received in server shutdown :"+ eventReceived); try { Thread.sleep(startAfterTimeMS); } catch (InterruptedException e) { } try { if (thriftDataReceiver != null){ thriftDataReceiver.start(DataPublisherTestUtil.LOCAL_HOST); }else { start(port); } } catch (DataBridgeException e) { log.error(e); } } } }