/*
* Copyright (c) 2014 Red Hat, Inc. and/or its affiliates.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Cheng Fang - Initial API and implementation
*/
package org.jberet.job.model;
import java.util.LinkedList;
import org.junit.Assert;
import org.junit.Test;
public class StepMergerTest {
@Test
public void propertiesListenersFromParentJob() throws Exception {
final Job childJob = JobMergerTest.loadJob("step-properties-listeners-child.xml");
final Step child = getStep(childJob, "step-properties-listeners-child-step");
Assert.assertEquals(2, child.getProperties().getPropertiesMapping().size());
JobMergerTest.propertiesContain(child.getProperties(), new String[]{"parent", "parent2"});
Assert.assertEquals(2, child.getListeners().getListeners().size());
}
@Test
public void mergeFalse() throws Exception {
final Job childJob = JobMergerTest.loadJob("step-merge-false-child.xml");
final Step child = getStep(childJob, "step-merge-false-child-step");
Assert.assertEquals(0, child.getProperties().getPropertiesMapping().size());
Assert.assertEquals(0, child.getListeners().getListeners().size());
}
@Test
public void mergeTrue() throws Exception {
final Job childJob = JobMergerTest.loadJob("step-merge-true-child.xml");
final Step child = getStep(childJob, "step-merge-true-child-step");
Assert.assertEquals(2, child.getProperties().getPropertiesMapping().size());
JobMergerTest.propertiesContain(child.getProperties(), new String[]{"parent", "child"});
Assert.assertEquals(2, child.getListeners().getListeners().size());
}
@Test
public void stepSameFileParentChild() throws Exception {
final Job childJob = JobMergerTest.loadJob("step-same-file-parent-child");
final String[] child1And2 = new String[]{"step-same-file-child-1", "step-same-file-child-2"};
Step child;
for (final String c : child1And2) {
child = getStep(childJob, c);
Assert.assertEquals(2, child.getProperties().getPropertiesMapping().size());
JobMergerTest.propertiesContain(child.getProperties(), new String[]{"parent", "child"}, true);
//Assert.assertEquals(3, child.getListeners().getListeners().size());
Assert.assertEquals(2, child.getListeners().getListeners().size()); //remove dup listeners
JobMergerTest.listenersContain(child.getListeners(), new String[]{"parent-listener", "child-listener"});
Assert.assertEquals("child-batchlet", child.getBatchlet().getRef());
}
child = getStep(childJob, "step-same-file-child-child");
Assert.assertEquals(3, child.getProperties().getPropertiesMapping().size());
JobMergerTest.propertiesContain(child.getProperties(), new String[]{"parent", "child", "child-child"}, true);
//Assert.assertEquals(4, child.getListeners().getListeners().size());
Assert.assertEquals(3, child.getListeners().getListeners().size()); //remove dup listeners
JobMergerTest.listenersContain(child.getListeners(), new String[]{"parent-listener", "child-listener", "child-child-listener"});
Assert.assertEquals("child-child-batchlet", child.getBatchlet().getRef());
}
@Test
public void emptyParent() throws Exception {
final Job childJob = JobMergerTest.loadJob("step-same-file-parent-child");
final Step child = getStep(childJob, "inheriting-empty-parent");
emptyStep(child);
}
@Test
public void emptyChild() throws Exception {
final Job childJob = JobMergerTest.loadJob("step-same-file-parent-child");
final Step child = getStep(childJob, "empty-child");
emptyStep(child);
}
private void emptyStep(final Step child) throws Exception {
Assert.assertEquals(1, child.getProperties().getPropertiesMapping().size());
JobMergerTest.propertiesContain(child.getProperties(), new String[]{"child"}, true);
Assert.assertEquals(1, child.getListeners().getListeners().size());
JobMergerTest.listenersContain(child.getListeners(), new String[]{"child-listener"});
Assert.assertEquals("child-batchlet", child.getBatchlet().getRef());
}
protected static LinkedList<Step> getSteps(final Job job) {
final LinkedList<Step> results = new LinkedList<Step>();
for (final JobElement e : job.getJobElements()) {
if (e instanceof Step) {
results.add((Step) e);
}
}
return results;
}
protected static Step getStep(final Job job, final String stepId) {
for (final Step s : getSteps(job)) {
if (s.getId().equals(stepId)) {
return s;
}
}
return null;
}
}