/** * 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 org.apache.ambari; import java.util.List; import junit.framework.TestCase; import org.apache.ambari.eventdb.model.WorkflowContext; import org.apache.ambari.eventdb.model.WorkflowDag; import org.apache.ambari.eventdb.model.WorkflowDag.WorkflowDagEntry; import org.apache.ambari.log4j.hadoop.mapreduce.jobhistory.MapReduceJobHistoryUpdater; /** * */ public class TestMapReduceJobHistoryUpdater extends TestCase { public void testDagMerging() { WorkflowDag dag1 = new WorkflowDag(); dag1.addEntry(getEntry("a", "b", "c")); dag1.addEntry(getEntry("b", "d")); WorkflowContext one = new WorkflowContext(); one.setWorkflowDag(dag1); WorkflowDag dag2 = new WorkflowDag(); dag2.addEntry(getEntry("a", "d")); dag2.addEntry(getEntry("c", "e")); WorkflowContext two = new WorkflowContext(); two.setWorkflowDag(dag2); WorkflowDag emptyDag = new WorkflowDag(); WorkflowContext three = new WorkflowContext(); three.setWorkflowDag(emptyDag); WorkflowDag mergedDag = new WorkflowDag(); mergedDag.addEntry(getEntry("a", "b", "c", "d")); mergedDag.addEntry(getEntry("b", "d")); mergedDag.addEntry(getEntry("c", "e")); assertEquals(mergedDag, MapReduceJobHistoryUpdater.constructMergedDag(one, two)); assertEquals(mergedDag, MapReduceJobHistoryUpdater.constructMergedDag(two, one)); // test blank dag assertEquals(dag1, MapReduceJobHistoryUpdater.constructMergedDag(three, one)); assertEquals(dag1, MapReduceJobHistoryUpdater.constructMergedDag(one, three)); assertEquals(dag2, MapReduceJobHistoryUpdater.constructMergedDag(three, two)); assertEquals(dag2, MapReduceJobHistoryUpdater.constructMergedDag(two, three)); // test null dag assertEquals(dag1, MapReduceJobHistoryUpdater.constructMergedDag(new WorkflowContext(), one)); assertEquals(dag1, MapReduceJobHistoryUpdater.constructMergedDag(one, new WorkflowContext())); assertEquals(dag2, MapReduceJobHistoryUpdater.constructMergedDag(new WorkflowContext(), two)); assertEquals(dag2, MapReduceJobHistoryUpdater.constructMergedDag(two, new WorkflowContext())); // test same dag assertEquals(dag1, MapReduceJobHistoryUpdater.constructMergedDag(one, one)); assertEquals(dag2, MapReduceJobHistoryUpdater.constructMergedDag(two, two)); assertEquals(emptyDag, MapReduceJobHistoryUpdater.constructMergedDag(three, three)); } private static WorkflowDagEntry getEntry(String source, String... targets) { WorkflowDagEntry entry = new WorkflowDagEntry(); entry.setSource(source); for (String target : targets) { entry.addTarget(target); } return entry; } private static void assertEquals(WorkflowDag dag1, WorkflowDag dag2) { assertEquals(dag1.size(), dag2.size()); List<WorkflowDagEntry> entries1 = dag1.getEntries(); List<WorkflowDagEntry> entries2 = dag2.getEntries(); assertEquals(entries1.size(), entries2.size()); for (int i = 0; i < entries1.size(); i++) { WorkflowDagEntry e1 = entries1.get(i); WorkflowDagEntry e2 = entries2.get(i); assertEquals(e1.getSource(), e2.getSource()); List<String> t1 = e1.getTargets(); List<String> t2 = e2.getTargets(); assertEquals(t1.size(), t2.size()); for (int j = 0; j < t1.size(); j++) { assertEquals(t1.get(j), t2.get(j)); } } } }