Make sure tests don't blindly continue if a command is "silently" failed
Make the default execute() function fail fast on first command printed "fatal: " to output. Introduced executeUnchecked() for few tests which wanted to test fatal output. Change-Id: I5b09aad9443515636811fc4d00bf8b8b9587a626 Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
This commit is contained in:
parent
3fc93f8a56
commit
02ade82b34
|
@ -48,11 +48,13 @@
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.eclipse.jgit.junit.JGitTestUtil;
|
import org.eclipse.jgit.junit.JGitTestUtil;
|
||||||
import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
|
import org.eclipse.jgit.junit.LocalDiskRepositoryTestCase;
|
||||||
import org.eclipse.jgit.pgm.CLIGitCommand;
|
import org.eclipse.jgit.pgm.CLIGitCommand;
|
||||||
|
import org.eclipse.jgit.pgm.Die;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
|
|
||||||
public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase {
|
public class CLIRepositoryTestCase extends LocalDiskRepositoryTestCase {
|
||||||
|
@ -79,7 +81,7 @@ public void setUp() throws Exception {
|
||||||
* @return command output
|
* @return command output
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
protected String[] execute(String... cmds) throws Exception {
|
protected String[] executeUnchecked(String... cmds) throws Exception {
|
||||||
List<String> result = new ArrayList<String>(cmds.length);
|
List<String> result = new ArrayList<String>(cmds.length);
|
||||||
for (String cmd : cmds) {
|
for (String cmd : cmds) {
|
||||||
result.addAll(CLIGitCommand.execute(cmd, db));
|
result.addAll(CLIGitCommand.execute(cmd, db));
|
||||||
|
@ -87,6 +89,28 @@ protected String[] execute(String... cmds) throws Exception {
|
||||||
return result.toArray(new String[0]);
|
return result.toArray(new String[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Executes specified git commands (with arguments), throws exception and
|
||||||
|
* stops execution on first command which output contains a 'fatal:' error
|
||||||
|
*
|
||||||
|
* @param cmds
|
||||||
|
* each string argument must be a valid git command line, e.g.
|
||||||
|
* "git branch -h"
|
||||||
|
* @return command output
|
||||||
|
* @throws Exception
|
||||||
|
*/
|
||||||
|
protected String[] execute(String... cmds) throws Exception {
|
||||||
|
List<String> result = new ArrayList<String>(cmds.length);
|
||||||
|
for (String cmd : cmds) {
|
||||||
|
List<String> out = CLIGitCommand.execute(cmd, db);
|
||||||
|
if (contains(out, "fatal: ")) {
|
||||||
|
throw new Die(toString(out));
|
||||||
|
}
|
||||||
|
result.addAll(out);
|
||||||
|
}
|
||||||
|
return result.toArray(new String[0]);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param link
|
* @param link
|
||||||
* the path of the symbolic link to create
|
* the path of the symbolic link to create
|
||||||
|
@ -196,15 +220,32 @@ protected void assertStringArrayEquals(String expected, String[] actual) {
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void assertArrayOfLinesEquals(String[] expected, String[] actual) {
|
protected void assertArrayOfLinesEquals(String[] expected, String[] actual) {
|
||||||
assertEquals(toText(expected), toText(actual));
|
assertEquals(toString(expected), toString(actual));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String toText(String[] lines) {
|
public static String toString(String[] lines) {
|
||||||
|
return toString(Arrays.asList(lines));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String toString(List<String> lines) {
|
||||||
StringBuilder b = new StringBuilder();
|
StringBuilder b = new StringBuilder();
|
||||||
for (String s : lines) {
|
for (String s : lines) {
|
||||||
b.append(s);
|
if (s != null && !s.isEmpty()) {
|
||||||
b.append('\n');
|
b.append(s);
|
||||||
|
if (!s.endsWith("\n")) {
|
||||||
|
b.append('\n');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return b.toString();
|
return b.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean contains(List<String> lines, String str) {
|
||||||
|
for (String s : lines) {
|
||||||
|
if (s.contains(str)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -65,7 +65,7 @@ public void setUp() throws Exception {
|
||||||
@Test
|
@Test
|
||||||
public void testAddNothing() throws Exception {
|
public void testAddNothing() throws Exception {
|
||||||
assertEquals("fatal: Argument \"filepattern\" is required", //
|
assertEquals("fatal: Argument \"filepattern\" is required", //
|
||||||
execute("git add")[0]);
|
executeUnchecked("git add")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -102,7 +102,8 @@ public void testEmptyTar() throws Exception {
|
||||||
@Test
|
@Test
|
||||||
public void testUnrecognizedFormat() throws Exception {
|
public void testUnrecognizedFormat() throws Exception {
|
||||||
String[] expect = new String[] { "fatal: Unknown archive format 'nonsense'" };
|
String[] expect = new String[] { "fatal: Unknown archive format 'nonsense'" };
|
||||||
String[] actual = execute("git archive --format=nonsense " + emptyTree);
|
String[] actual = executeUnchecked(
|
||||||
|
"git archive --format=nonsense " + emptyTree);
|
||||||
assertArrayEquals(expect, actual);
|
assertArrayEquals(expect, actual);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -89,6 +89,6 @@ public void testListContains() throws Exception {
|
||||||
@Test
|
@Test
|
||||||
public void testExistingBranch() throws Exception {
|
public void testExistingBranch() throws Exception {
|
||||||
assertEquals("fatal: A branch named 'master' already exists.",
|
assertEquals("fatal: A branch named 'master' already exists.",
|
||||||
execute("git branch master")[0]);
|
executeUnchecked("git branch master")[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,13 +109,13 @@ public void testCheckoutNewBranchThatAlreadyExists() throws Exception {
|
||||||
|
|
||||||
assertStringArrayEquals(
|
assertStringArrayEquals(
|
||||||
"fatal: A branch named 'master' already exists.",
|
"fatal: A branch named 'master' already exists.",
|
||||||
execute("git checkout -b master"));
|
executeUnchecked("git checkout -b master"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCheckoutNewBranchOnBranchToBeBorn() throws Exception {
|
public void testCheckoutNewBranchOnBranchToBeBorn() throws Exception {
|
||||||
assertStringArrayEquals("fatal: You are on a branch yet to be born",
|
assertStringArrayEquals("fatal: You are on a branch yet to be born",
|
||||||
execute("git checkout -b side"));
|
executeUnchecked("git checkout -b side"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -98,16 +98,4 @@ public void testCommitAll() throws Exception {
|
||||||
result.trim().equals("On branch master"));
|
result.trim().equals("On branch master"));
|
||||||
}
|
}
|
||||||
|
|
||||||
String toString(String[] arr) {
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
for (String s : arr) {
|
|
||||||
if (s != null && !s.isEmpty()) {
|
|
||||||
sb.append(s);
|
|
||||||
if (!s.endsWith("\n")) {
|
|
||||||
sb.append('\n');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,7 @@ private void initialCommitAndTag() throws Exception {
|
||||||
public void testNoHead() throws Exception {
|
public void testNoHead() throws Exception {
|
||||||
assertArrayEquals(
|
assertArrayEquals(
|
||||||
new String[] { "fatal: No names found, cannot describe anything." },
|
new String[] { "fatal: No names found, cannot describe anything." },
|
||||||
execute("git describe"));
|
executeUnchecked("git describe"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -81,7 +81,7 @@ public void testHeadNoTag() throws Exception {
|
||||||
git.commit().setMessage("initial commit").call();
|
git.commit().setMessage("initial commit").call();
|
||||||
assertArrayEquals(
|
assertArrayEquals(
|
||||||
new String[] { "fatal: No names found, cannot describe anything." },
|
new String[] { "fatal: No names found, cannot describe anything." },
|
||||||
execute("git describe"));
|
executeUnchecked("git describe"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -119,7 +119,7 @@ public void testHelpArgumentBeforeUnknown() throws Exception {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testHelpArgumentAfterUnknown() throws Exception {
|
public void testHelpArgumentAfterUnknown() throws Exception {
|
||||||
String[] output = execute("git describe -XYZ -h");
|
String[] output = executeUnchecked("git describe -XYZ -h");
|
||||||
String all = Arrays.toString(output);
|
String all = Arrays.toString(output);
|
||||||
assertTrue("Unexpected help output: " + all,
|
assertTrue("Unexpected help output: " + all,
|
||||||
all.contains("jgit describe"));
|
all.contains("jgit describe"));
|
||||||
|
|
|
@ -195,7 +195,7 @@ public void testNoFastForward() throws Exception {
|
||||||
@Test
|
@Test
|
||||||
public void testNoFastForwardAndSquash() throws Exception {
|
public void testNoFastForwardAndSquash() throws Exception {
|
||||||
assertEquals("fatal: You cannot combine --squash with --no-ff.",
|
assertEquals("fatal: You cannot combine --squash with --no-ff.",
|
||||||
execute("git merge master --no-ff --squash")[0]);
|
executeUnchecked("git merge master --no-ff --squash")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -210,7 +210,7 @@ public void testFastForwardOnly() throws Exception {
|
||||||
git.commit().setMessage("commit#2").call();
|
git.commit().setMessage("commit#2").call();
|
||||||
|
|
||||||
assertEquals("fatal: Not possible to fast-forward, aborting.",
|
assertEquals("fatal: Not possible to fast-forward, aborting.",
|
||||||
execute("git merge master --ff-only")[0]);
|
executeUnchecked("git merge master --ff-only")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -103,7 +103,7 @@ public void setUp() throws Exception {
|
||||||
@Test
|
@Test
|
||||||
public void testMissingPath() throws Exception {
|
public void testMissingPath() throws Exception {
|
||||||
assertEquals("fatal: Argument \"path\" is required",
|
assertEquals("fatal: Argument \"path\" is required",
|
||||||
execute("git repo")[0]);
|
executeUnchecked("git repo")[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -68,6 +68,6 @@ public void testTagTwice() throws Exception {
|
||||||
git.commit().setMessage("commit").call();
|
git.commit().setMessage("commit").call();
|
||||||
|
|
||||||
assertEquals("fatal: tag 'test' already exists",
|
assertEquals("fatal: tag 'test' already exists",
|
||||||
execute("git tag test")[0]);
|
executeUnchecked("git tag test")[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue