package org.jenkinsci.tools.configcloner.handler;
import static org.jenkinsci.tools.configcloner.handler.Helper.dest;
import static org.jenkinsci.tools.configcloner.handler.Helper.map;
import static org.junit.Assert.assertEquals;
import java.util.Arrays;
import junitparams.JUnitParamsRunner;
import junitparams.Parameters;
import org.jenkinsci.tools.configcloner.CommandInvoker;
import org.jenkinsci.tools.configcloner.ConfigDestination;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(JUnitParamsRunner.class)
public class CloneViewTest {
private final CommandInvoker invoker = new CommandInvoker("view");
@Test(expected = IllegalArgumentException.class) @Parameters(method = "invalidArgs")
public void failWithIncorectArguments(final String[] args) {
invoker.args(args);
invoker.main().getHandler(invoker.commandArgs()).run(null);
}
public Object[][] invalidArgs() {
return new String[][][] {
// invalid count
{{}},
{{"http://jenki.ns"}},
// same url
{{"http://jenki.ns", "http://jenki.ns"}},
// not an url
{{"not-an-url", "http://jenki.ns"}},
{{"http://jenki.ns", "not-an-url"}},
{{"not-an-url", "not-an-url"}},
};
}
@Test @Parameters(method = "validArgs")
public void parseValidDestinations(final String[] args, final ConfigDestination[] dests) {
invoker.args(args);
final TransferHandler handler = (TransferHandler) invoker.main().getHandler(invoker.commandArgs());
assertEquals(dests[0], handler.source());
assertEquals(
Arrays.asList(dests).subList(1, dests.length),
handler.destinations()
);
}
public Object[][] validArgs() {
return new Object[][][] {
map("http://1.jnk.ns/view/a", "http://2.jnk.ns/").to(
dest("http://1.jnk.ns/", "a"),
dest("http://2.jnk.ns/", "a")
),
map("http://1.jnk.ns/view/a/", "http://2.jnk.ns/view/b").to(
dest("http://1.jnk.ns/", "a"),
dest("http://2.jnk.ns/", "b")
),
map("http://1.jnk.ns/jenkins/view/viewname", "http://2.jnk.ns/infra/hudson/view/name/some_tail").to(
dest("http://1.jnk.ns/jenkins/", "viewname"),
dest("http://2.jnk.ns/infra/hudson/", "name")
),
map("http://1.jnk.ns/view/src", "http://2.jnk.ns/view/dst1", "http://3.jnk.ns/view/dst2").to(
dest("http://1.jnk.ns/", "src"),
dest("http://2.jnk.ns/", "dst1"),
dest("http://3.jnk.ns/", "dst2")
),
map(
"http://1.jnk.ns::src", "http://2.jnk.ns/::dst1",
"http://3.jnk.ns:8080::dst2", "http://3.jnk.ns:8080/::dst3",
"http://3.jnk.ns:8080/path::dst4", "http://3.jnk.ns:8080/path/::dst5"
).to(
dest("http://1.jnk.ns", "src"), dest("http://2.jnk.ns/", "dst1"),
dest("http://3.jnk.ns:8080", "dst2"), dest("http://3.jnk.ns:8080/", "dst3"),
dest("http://3.jnk.ns:8080/path", "dst4"), dest("http://3.jnk.ns:8080/path/", "dst5")
),
// Parse nested views
map("http://1.jnk.ns/jenkins/view/a/view/b", "http://2.jnk.ns/infra/hudson/view/c/view/d/view/e").to(
dest("http://1.jnk.ns/jenkins/", "a/b"),
dest("http://2.jnk.ns/infra/hudson/", "c/d/e")
),
};
}
}