Package com.netflix.astyanax.connectionpool.impl

Source Code of com.netflix.astyanax.connectionpool.impl.HostConnectionPoolPartitionTest

package com.netflix.astyanax.connectionpool.impl;

import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import junit.framework.Assert;

import org.junit.Test;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.netflix.astyanax.connectionpool.Host;
import com.netflix.astyanax.connectionpool.HostConnectionPool;
import com.netflix.astyanax.connectionpool.LatencyScoreStrategy;
import com.netflix.astyanax.partitioner.LongBOPPartitioner;
import com.netflix.astyanax.test.TestClient;
import com.netflix.astyanax.test.TestHostConnectionPool;

public class HostConnectionPoolPartitionTest {

    @Test
    public void testPartition() {
        LatencyScoreStrategy strategy = new SmaLatencyScoreStrategyImpl(10000, 60000, 100, 4.0);

        TokenHostConnectionPoolPartition partition = new TokenHostConnectionPoolPartition(new BigInteger("1"), strategy);

        List<TestHostConnectionPool> pools = Arrays.asList(
                makePool(1),
                makePool(2),
                makePool(3),
                makePool(4));

        List<TestHostConnectionPool> pool1 = Arrays.asList(
                pools.get(0),
                pools.get(1),
                pools.get(2));
        List<TestHostConnectionPool> pool2 = Arrays.asList(
                pools.get(0),
                pools.get(3));

        Assert.assertEquals(0, partition.getPools().size());
        partition.setPools(pool1);
        Assert.assertEquals(3, partition.getPools().size());

        partition.setPools(pool2);
        Assert.assertEquals(2, partition.getPools().size());
    }

    // Is there a reason that this test is in HostConnectionPoolPartitionTest?
    // Perhaps this should be moved to the existing TokenAwareConnectionPoolTest or
    // a new TokenParitionedTopologyTest?
    @Test
    public void testTopology() {
        LatencyScoreStrategy strategy = new SmaLatencyScoreStrategyImpl(10000,60000, 100, 4.0);

        int nHosts = 6;
        int nReplicationFactor = 3;

        TokenPartitionedTopology<TestClient> topology = new TokenPartitionedTopology<TestClient>(LongBOPPartitioner.get(), strategy);

        // Make the set of pools
        List<HostConnectionPool<TestClient>> pools = Lists.newArrayList();
        for (int i = 0; i < nHosts; i++) {
            pools.add(makePool(i));
        }

        // Make the flat ring (before ring_describe is called)
        List<HostConnectionPool<TestClient>> flatRing = pools;
        boolean didChange = topology.setPools(flatRing);
        Assert.assertTrue(didChange);
        Assert.assertEquals(0, topology.getPartitionCount());
        System.out.println(topology);

        // Make a ring with tokens and RF
//        Map<BigInteger, Collection<HostConnectionPool<TestClient>>> tokenRing = Maps.newHashMap();
//        for (int i = 0; i < nHosts; i++) {
//            List<HostConnectionPool<TestClient>> partition = Lists.newArrayList();
//            for (int j = 0; j < nReplicationFactor; j++) {
//                partition.add(pools.get((i + j) % nHosts));
//            }
//            tokenRing.put(new BigInteger(Integer.toString(i * 1000)), partition);
//        }
//
//        didChange = topology.setPools(tokenRing);
//        Assert.assertTrue(didChange);
//        Assert.assertEquals(nHosts, topology.getPartitionCount());
//        System.out.println(topology);
//
//        HostConnectionPoolPartition<TestClient> partition = topology
//                .getPartition(null);
//        Assert.assertEquals(nHosts, partition.getPools().size());
//
//        // Partition Token Map:
//        // HCP 0 - (5000, 0]
//        // HCP 1000 - (0, 1000]
//        // HCP 2000 - (1000, 2000]
//        // HCP 3000 - (2000, 3000]
//        // HCP 4000 - (3000, 4000]
//        // HCP 5000 - (4000, 5000]
//
//        // Test ordinals
//        for (int i = 0; i < nHosts; i++) {
//            partition = topology.getPartition(new BigInteger(Integer
//                    .toString(i * 1000)));
//            Assert.assertEquals(new BigInteger(Integer.toString(i * 1000)),
//                    partition.id());
//        }
//
//        // Test mid-range tokens
//        for (int i = nHosts; i > 0; i--) {
//            partition = topology.getPartition(new BigInteger(Integer
//                    .toString(i * 1000 - 500)));
//
//            if (i == nHosts) {  // 5500 is contained in (5000,0] which belongs to HCP 0
//                Assert.assertEquals(BigInteger.ZERO, partition.id());
//            } else {
//                Assert.assertEquals(new BigInteger(Integer.toString(i * 1000)),
//                        partition.id());
//            }
//        }
//
//        Map<BigInteger, Collection<HostConnectionPool<TestClient>>> emptyRing = Maps
//                .newHashMap();
//        topology.setPools(emptyRing);
//        System.out.println(topology);
//        Assert.assertEquals(0, topology.getPartitionCount());
//        Assert.assertEquals(0, topology.getAllPools().getPools().size());
    }

    public TestHostConnectionPool makePool(int index) {
        return new TestHostConnectionPool(new Host("127.0.0." + index, 0));
    }
}
TOP

Related Classes of com.netflix.astyanax.connectionpool.impl.HostConnectionPoolPartitionTest

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.