Package voldemort.server.socket

Source Code of voldemort.server.socket.NioStatsJmxTest

/*
* Copyright 2008-2012 LinkedIn, Inc
*
* Licensed 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 voldemort.server.socket;

import static org.junit.Assert.assertEquals;

import java.lang.management.ManagementFactory;
import java.util.Properties;
import java.util.Random;
import java.util.concurrent.TimeUnit;

import javax.management.MBeanServer;
import javax.management.ObjectName;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import voldemort.ServerTestUtils;
import voldemort.client.ClientConfig;
import voldemort.cluster.Cluster;
import voldemort.cluster.Node;
import voldemort.server.VoldemortServer;
import voldemort.server.niosocket.NioSocketService;
import voldemort.store.Store;
import voldemort.store.socket.SocketStoreFactory;
import voldemort.store.socket.clientrequest.ClientRequestExecutorPool;
import voldemort.utils.ByteArray;
import voldemort.utils.JmxUtils;
import voldemort.versioning.Versioned;

/**
* Unit test for NIO selector connection stats
*
*/
public class NioStatsJmxTest {

    private VoldemortServer server;
    private Store<ByteArray, byte[], byte[]> socketStore;
    private static final int MAX_TRAFFIC_TIME_MS = 2000;

    @Before
    public void setUp() throws Exception {
        String storesXmlfile = "test/common/voldemort/config/single-store.xml";
        ClientConfig clientConfig = new ClientConfig().setMaxConnectionsPerNode(1).setMaxThreads(1);
        SocketStoreFactory socketStoreFactory = new ClientRequestExecutorPool(clientConfig.getSelectors(),
                                                                              clientConfig.getMaxConnectionsPerNode(),
                                                                              clientConfig.getConnectionTimeout(TimeUnit.MILLISECONDS),
                                                                              clientConfig.getSocketTimeout(TimeUnit.MILLISECONDS),
                                                                              clientConfig.getSocketBufferSize(),
                                                                              clientConfig.getSocketKeepAlive());

        Properties props = new Properties();
        props.put("jmx.enable", "true");

        int numServers = 1;
        VoldemortServer[] servers = new VoldemortServer[numServers];
        Cluster cluster = ServerTestUtils.startVoldemortCluster(numServers,
                                                                servers,
                                                                null,
                                                                socketStoreFactory,
                                                                true,
                                                                null,
                                                                storesXmlfile,
                                                                props);

        server = servers[0];

        for(Node node: cluster.getNodes()) {
            socketStore = ServerTestUtils.getSocketStore(socketStoreFactory,
                                                         "test",
                                                         node.getSocketPort(),
                                                         clientConfig.getRequestFormatType());
        }
    }

    @Test
    public void testActiveConnectionCount() throws Exception {
        // generate some traffic,
        Random dataGen = new Random();
        long start = System.currentTimeMillis();

        byte[] data = new byte[256];
        while(((System.currentTimeMillis()) - start) <= MAX_TRAFFIC_TIME_MS) {
            dataGen.nextBytes(data);
            ByteArray key = new ByteArray(data);
            socketStore.put(key, new Versioned<byte[]>(data), null);
        }

        // has to be 1, since we configure client with 1 connection and do
        // atleast one operation
        MBeanServer beanserver = ManagementFactory.getPlatformMBeanServer();
        ObjectName name = JmxUtils.createObjectName(JmxUtils.getPackageName(NioSocketService.class),
                                                    "nio-socket-server");
        assertEquals(1, beanserver.getAttribute(name, "numActiveConnections"));
    }

    @After
    public void tearDown() {
        server.stop();
    }
}
TOP

Related Classes of voldemort.server.socket.NioStatsJmxTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.