package com.splout.db.common;
/*
* #%L
* Splout SQL commons
* %%
* Copyright (C) 2012 Datasalt Systems S.L.
* %%
* 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.
* #L%
*/
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestReplicationMap {
/**
* Through this example one can understand how is a "Round-robin replication map" built. Each shard (partition) is
* assigned to consecutive hosts up to the specified replication factor. Each new shard is assigned starting from the
* next host.
*/
@Test
public void testRoundRobinMap() {
ReplicationMap rMap = ReplicationMap.roundRobinMap(6, 2, "host1", "host2", "host3");
assertEquals(6, rMap.getReplicationEntries().size());
assertEquals(0, (int) rMap.getReplicationEntries().get(0).getShard());
assertEquals(2, (int) rMap.getReplicationEntries().get(0).getNodes().size());
assertEquals("host1", rMap.getReplicationEntries().get(0).getNodes().get(0));
assertEquals("host2", rMap.getReplicationEntries().get(0).getNodes().get(1));
assertEquals(1, (int) rMap.getReplicationEntries().get(1).getShard());
assertEquals(2, (int) rMap.getReplicationEntries().get(1).getNodes().size());
assertEquals("host2", rMap.getReplicationEntries().get(1).getNodes().get(0));
assertEquals("host3", rMap.getReplicationEntries().get(1).getNodes().get(1));
assertEquals(2, (int) rMap.getReplicationEntries().get(2).getShard());
assertEquals(2, (int) rMap.getReplicationEntries().get(2).getNodes().size());
assertEquals("host3", rMap.getReplicationEntries().get(2).getNodes().get(0));
assertEquals("host1", rMap.getReplicationEntries().get(2).getNodes().get(1));
assertEquals(3, (int) rMap.getReplicationEntries().get(3).getShard());
assertEquals(2, (int) rMap.getReplicationEntries().get(3).getNodes().size());
assertEquals("host1", rMap.getReplicationEntries().get(3).getNodes().get(0));
assertEquals("host2", rMap.getReplicationEntries().get(3).getNodes().get(1));
assertEquals(4, (int) rMap.getReplicationEntries().get(4).getShard());
assertEquals(2, (int) rMap.getReplicationEntries().get(4).getNodes().size());
assertEquals("host2", rMap.getReplicationEntries().get(4).getNodes().get(0));
assertEquals("host3", rMap.getReplicationEntries().get(4).getNodes().get(1));
assertEquals(5, (int) rMap.getReplicationEntries().get(5).getShard());
assertEquals(2, (int) rMap.getReplicationEntries().get(5).getNodes().size());
assertEquals("host3", rMap.getReplicationEntries().get(5).getNodes().get(0));
assertEquals("host1", rMap.getReplicationEntries().get(5).getNodes().get(1));
}
@Test
public void test() {
ReplicationMap rMap = ReplicationMap.roundRobinMap(3, 3, "host1", "host2", "host3");
assertEquals(3, rMap.getReplicationEntries().size());
assertEquals(0, (int) rMap.getReplicationEntries().get(0).getShard());
assertEquals(3, (int) rMap.getReplicationEntries().get(0).getNodes().size());
assertEquals("host1", rMap.getReplicationEntries().get(0).getNodes().get(0));
assertEquals("host2", rMap.getReplicationEntries().get(0).getNodes().get(1));
assertEquals("host3", rMap.getReplicationEntries().get(0).getNodes().get(2));
assertEquals(1, (int) rMap.getReplicationEntries().get(1).getShard());
assertEquals(3, (int) rMap.getReplicationEntries().get(1).getNodes().size());
assertEquals("host2", rMap.getReplicationEntries().get(1).getNodes().get(0));
assertEquals("host3", rMap.getReplicationEntries().get(1).getNodes().get(1));
assertEquals("host1", rMap.getReplicationEntries().get(1).getNodes().get(2));
assertEquals(2, (int) rMap.getReplicationEntries().get(2).getShard());
assertEquals(3, (int) rMap.getReplicationEntries().get(2).getNodes().size());
assertEquals("host3", rMap.getReplicationEntries().get(2).getNodes().get(0));
assertEquals("host1", rMap.getReplicationEntries().get(2).getNodes().get(1));
assertEquals("host2", rMap.getReplicationEntries().get(2).getNodes().get(2));
}
}