/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF 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 gobblin.data.management.copy.replication; import java.util.List; import org.testng.Assert; import org.testng.annotations.Test; import com.typesafe.config.Config; import com.typesafe.config.ConfigFactory; @Test(groups = {"gobblin.data.management.copy.replication"}) public class ReplicationConfigurationTest { @Test public void testValidConfigsInPullMode() throws Exception{ Config c = ConfigFactory.parseResources(getClass().getClassLoader(), "replicationConfigTest/validCompleteDataset.conf"); ReplicationConfiguration rc = ReplicationConfiguration.buildFromConfig(c); this.checkReplicationConfig_Pull(rc); } @Test public void testValidConfigsInPullMode_withTopologyPicker() throws Exception{ Config c = ConfigFactory.parseResources(getClass().getClassLoader(), "replicationConfigTest/validCompleteDataset_PullMode2.conf"); ReplicationConfiguration rc = ReplicationConfiguration.buildFromConfig(c); this.checkReplicationConfig_Pull(rc); } @Test public void testValidConfigsInPushMode_withClusterResolve() throws Exception{ Config c = ConfigFactory.parseResources(getClass().getClassLoader(), "replicationConfigTest/validCompleteDataset_PushMode.conf").resolve(); ReplicationConfiguration rc = ReplicationConfiguration.buildFromConfig(c); this.checkReplicationConfig_Push(rc); } @Test public void testValidConfigsInPushMode_withTopologyPicker() throws Exception{ Config c = ConfigFactory.parseResources(getClass().getClassLoader(), "replicationConfigTest/validCompleteDataset_PushMode2.conf").resolve(); ReplicationConfiguration rc = ReplicationConfiguration.buildFromConfig(c); this.checkReplicationConfig_Push(rc); } private void checkReplicationConfigStaticPart(ReplicationConfiguration rc) throws Exception{ ReplicationMetaData md = rc.getMetaData(); Assert.assertTrue(md.getValues().get().get(ReplicationConfiguration.METADATA_JIRA).equals("jira-4455")); Assert.assertTrue(md.getValues().get().get(ReplicationConfiguration.METADATA_NAME).equals("profileTest")); Assert.assertTrue(md.getValues().get().get(ReplicationConfiguration.METADATA_OWNER).equals("mitu")); EndPoint sourceTmp = rc.getSource(); Assert.assertTrue(sourceTmp instanceof SourceHadoopFsEndPoint); SourceHadoopFsEndPoint source = (SourceHadoopFsEndPoint)sourceTmp; Assert.assertTrue(source.getEndPointName().equals(ReplicationConfiguration.REPLICATION_SOURCE)); Assert.assertTrue(source.isSource()); HadoopFsReplicaConfig innerConf = source.getRc(); Assert.assertTrue(innerConf.getClustername().equals("cluster1")); Assert.assertTrue(innerConf.getFsURI().toString().equals("hdfs://coloX-cluster1nn01.grid.com:9000")); Assert.assertTrue(innerConf.getPath().toString().equals("/jobs/mitu/profileTest")); Assert.assertTrue(innerConf.getColo().equals("coloX")); List<EndPoint> replicas = rc.getReplicas(); Assert.assertTrue(replicas.size()==4); EndPoint replica_holdem = replicas.get(0); innerConf = ((ReplicaHadoopFsEndPoint)replica_holdem).getRc(); Assert.assertTrue(innerConf.getClustername().equals("cluster4")); Assert.assertTrue(innerConf.getFsURI().toString().equals("hdfs://coloY-cluster4nn01.grid.com:9000")); Assert.assertTrue(innerConf.getPath().toString().equals("/data/derived/oncluster4")); Assert.assertTrue(innerConf.getColo().equals("coloY")); EndPoint replica_uno = replicas.get(1); innerConf = ((ReplicaHadoopFsEndPoint)replica_uno).getRc(); Assert.assertTrue(innerConf.getClustername().equals("cluster3")); Assert.assertTrue(innerConf.getFsURI().toString().equals("hdfs://coloY-cluster3nn01.grid.com:9000")); Assert.assertTrue(innerConf.getPath().toString().equals("/data/derived/oncluster3")); Assert.assertTrue(innerConf.getColo().equals("coloY")); EndPoint replica_war = replicas.get(2); innerConf = ((ReplicaHadoopFsEndPoint)replica_war).getRc(); Assert.assertTrue(innerConf.getClustername().equals("cluster1")); Assert.assertTrue(innerConf.getFsURI().toString().equals("hdfs://coloX-cluster1nn01.grid.com:9000")); Assert.assertTrue(innerConf.getPath().toString().equals("/data/derived/oncluster1")); Assert.assertTrue(innerConf.getColo().equals("coloX")); EndPoint replica_tarock = replicas.get(3); innerConf = ((ReplicaHadoopFsEndPoint)replica_tarock).getRc(); Assert.assertTrue(innerConf.getClustername().equals("cluster2")); Assert.assertTrue(innerConf.getFsURI().toString().equals("hdfs://coloX-cluster2nn01.grid.com:9000")); Assert.assertTrue(innerConf.getPath().toString().equals("/data/derived/oncluster2")); Assert.assertTrue(innerConf.getColo().equals("coloX")); } private void checkReplicationConfig_Push(ReplicationConfiguration rc) throws Exception{ ReplicationCopyMode copyMode = rc.getCopyMode(); Assert.assertTrue(copyMode == ReplicationCopyMode.PUSH); checkReplicationConfigStaticPart(rc); List<EndPoint> replicas = rc.getReplicas(); EndPoint source = rc.getSource(); EndPoint replica4 = replicas.get(0); EndPoint replica3 = replicas.get(1); EndPoint replica1 = replicas.get(2); EndPoint replica2 = replicas.get(3); DataFlowTopology topology = rc.getDataFlowToplogy(); Assert.assertTrue(topology.getDataFlowPaths().size()==4); for(DataFlowTopology.DataFlowPath p: topology.getDataFlowPaths()){ List<CopyRoute> pairs = p.getCopyRoutes(); Assert.assertTrue(!pairs.isEmpty()); String copyFromName = pairs.get(0).getCopyFrom().getEndPointName(); if(copyFromName.equals("replica1")){ Assert.assertTrue(pairs.size()==1); Assert.assertTrue(pairs.get(0).getCopyFrom() == replica1 ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica2 ); } else if(copyFromName.equals("replica2")){ Assert.assertTrue(pairs.size()==1); Assert.assertTrue(pairs.get(0).getCopyFrom() == replica2 ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica4 ); } else if(copyFromName.equals("replica4")){ Assert.assertTrue(pairs.size()==1); Assert.assertTrue(pairs.get(0).getCopyFrom() == replica4 ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica3 ); } else if(copyFromName.equals(ReplicationConfiguration.REPLICATION_SOURCE)){ Assert.assertTrue(pairs.size()==1); Assert.assertTrue(pairs.get(0).getCopyFrom() == source ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica1 ); } else{ throw new Exception("CopyFrom name is invalid " +copyFromName); } } } private void checkReplicationConfig_Pull(ReplicationConfiguration rc) throws Exception{ ReplicationCopyMode copyMode = rc.getCopyMode(); Assert.assertTrue(copyMode == ReplicationCopyMode.PULL); checkReplicationConfigStaticPart(rc); List<EndPoint> replicas = rc.getReplicas(); EndPoint source = rc.getSource(); EndPoint replica4 = replicas.get(0); EndPoint replica3 = replicas.get(1); EndPoint replica1 = replicas.get(2); EndPoint replica2 = replicas.get(3); DataFlowTopology topology = rc.getDataFlowToplogy(); Assert.assertTrue(topology.getDataFlowPaths().size()==4); for(DataFlowTopology.DataFlowPath p: topology.getDataFlowPaths()){ List<CopyRoute> pairs = p.getCopyRoutes(); Assert.assertTrue(!pairs.isEmpty()); String copyToName = pairs.get(0).getCopyTo().getEndPointName(); if(copyToName.equals("replica1")){ Assert.assertTrue(pairs.size()==1); Assert.assertTrue(pairs.get(0).getCopyFrom() == source ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica1 ); } else if(copyToName.equals("replica2")){ Assert.assertTrue(pairs.size()==2); Assert.assertTrue(pairs.get(0).getCopyFrom() == replica1 ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica2 ); Assert.assertTrue(pairs.get(1).getCopyFrom() == source ); Assert.assertTrue(pairs.get(1).getCopyTo() == replica2 ); } else if(copyToName.equals("replica4")){ Assert.assertTrue(pairs.size()==3); Assert.assertTrue(pairs.get(0).getCopyFrom() == replica2 ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica4 ); Assert.assertTrue(pairs.get(1).getCopyFrom() == replica1 ); Assert.assertTrue(pairs.get(1).getCopyTo() == replica4 ); Assert.assertTrue(pairs.get(2).getCopyFrom() == source ); Assert.assertTrue(pairs.get(2).getCopyTo() == replica4 ); } else if(copyToName.equals("replica3")){ Assert.assertTrue(pairs.size()==4); Assert.assertTrue(pairs.get(0).getCopyFrom() == replica4 ); Assert.assertTrue(pairs.get(0).getCopyTo() == replica3 ); Assert.assertTrue(pairs.get(1).getCopyFrom() == replica2 ); Assert.assertTrue(pairs.get(1).getCopyTo() == replica3 ); Assert.assertTrue(pairs.get(2).getCopyFrom() == replica1 ); Assert.assertTrue(pairs.get(2).getCopyTo() == replica3 ); Assert.assertTrue(pairs.get(3).getCopyFrom() == source ); Assert.assertTrue(pairs.get(3).getCopyTo() == replica3 ); } else{ throw new Exception("CopyTo name is invalid " +copyToName); } } } }