/******************************************************************************* * Copyright (c) 2015 Vaughan Hilts and others. * 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: * Vaughan Hilts, Kyle Ross - Initial API and implementation *******************************************************************************/ package org.eclipse.mylyn.internal.gerrit.core; import org.eclipse.mylyn.reviews.internal.core.BuildResult; import org.eclipse.mylyn.reviews.internal.core.BuildResult.BuildStatus; import org.junit.Assert; import org.junit.Test; import com.google.common.collect.ImmutableList; /** * Performs tests against the HudsonCommentParser with various different comment sets. */ @SuppressWarnings("restriction") public class HudsonCommentParserTest { private final HudsonCommentParser parser = new HudsonCommentParser(); @Test public void canParseBuildStartedMessage() { String message = "Patch Set 1:\r\nBuild Started https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1017/"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(1, results.size()); BuildResult result = results.get(0); Assert.assertEquals(1, result.getPatchSetNumber()); Assert.assertEquals(1017, result.getBuildNumber()); Assert.assertEquals("https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1017/", result.getBuildUrl()); Assert.assertEquals("https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews", result.getJobName()); Assert.assertEquals(BuildStatus.STARTED, result.getBuildStatus()); } @Test public void canParseBuildGenericMessage() { String message = "Patch Set 4: Verified+1\r\n\r\nBuild Successful\r\n\r\nhttps://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ : SUCCESS"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(1, results.size()); BuildResult result = results.get(0); Assert.assertEquals(4, result.getPatchSetNumber()); Assert.assertEquals(1023, result.getBuildNumber()); Assert.assertEquals("https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/", result.getBuildUrl()); Assert.assertEquals("https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews", result.getJobName()); Assert.assertEquals(BuildStatus.SUCCESS, result.getBuildStatus()); String failedMessage = "Patch Set 9: Verified -1\r\n\r\nBuild failure\r\n\r\nhttps://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ : ABORTED"; ImmutableList<BuildResult> failedResults = parser.getBuildResult(failedMessage); Assert.assertEquals(1, failedResults.size()); BuildResult failedResult = failedResults.get(0); Assert.assertEquals(BuildStatus.ABORTED, failedResult.getBuildStatus()); } @Test public void doesNotParseQuotedHudsonComment() { String messageSpacesAfter = "> Patch Set 4: Verified+1\r\n> \r\n> Build Successful\r\n> \r\n> https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ : SUCCESS"; String messageSpacesBeforeAndAfter = " > Patch Set 4: Verified+1\r\n > \r\n > Build Successful\r\n > \r\n > https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ : SUCCESS"; ImmutableList<BuildResult> results = parser.getBuildResult(messageSpacesAfter); Assert.assertEquals(0, results.size()); ImmutableList<BuildResult> resultsForDoubleSpacing = parser.getBuildResult(messageSpacesBeforeAndAfter); Assert.assertEquals(0, resultsForDoubleSpacing.size()); } @Test public void canParseHudson3BuildMessages() { String newMessage = "Patch Set 9: Verified -1\r\n\r\nBuild successful\r\n\r\nhttps://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ : {}"; for (BuildStatus status : BuildStatus.values()) { String message = newMessage.replace("{}", status.toString()); ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(1, results.size()); BuildResult result = results.get(0); Assert.assertEquals(status, result.getBuildStatus()); } } @Test public void canParseWithIntegerInUrl() { String message = "Patch Set 4: Verified+1\r\n\r\nBuild Successful\r\n\r\nhttps://hudson2.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ : SUCCESS"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(1, results.size()); BuildResult result = results.get(0); Assert.assertNotNull(result); Assert.assertEquals(4, result.getPatchSetNumber()); Assert.assertEquals(1023, result.getBuildNumber()); } @Test public void canParseWithIntegersInJobUrl() { String message = "Patch Set 5: Verified+1\r\n\r\nBuild Successful\r\n\r\nhttps://hudson2.eclipse.org/2mylyn/job/2gerrit-mylyn-2reviews/1023/ : SUCCESS"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(1, results.size()); BuildResult result = results.get(0); Assert.assertNotNull(result); Assert.assertEquals(5, result.getPatchSetNumber()); Assert.assertEquals(1023, result.getBuildNumber()); } @Test public void missingPatchSetNumberShouldReturnEmpty() { String message = "Patch Set :\r\nBuild Started https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1017/"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(0, results.size()); } @Test public void nonHudsonCommentShouldReturnEmpty() { String message = "Uploaded patch set 2."; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(0, results.size()); } @Test public void missingBuildNumberShouldReturnEmpty() { String message = "Patch Set 1:\r\nBuild Started https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(0, results.size()); } @Test public void missingBuildStatusShouldReturnEmpty() { String message = "Patch Set 4: Verified+1\r\n\r\nBuild Successful\r\n\r\nhttps://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/ :"; String message2 = "Patch Set 4: Verified+1\r\n\r\nBuild Successful\r\n\r\nhttps://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1023/"; String message3 = "Patch Set 4:\r\nStarted https://hudson.eclipse.org/mylyn/job/gerrit-mylyn-reviews/1017/"; ImmutableList<BuildResult> result = parser.getBuildResult(message); ImmutableList<BuildResult> result2 = parser.getBuildResult(message2); ImmutableList<BuildResult> result3 = parser.getBuildResult(message3); Assert.assertEquals(0, result.size()); Assert.assertEquals(0, result2.size()); Assert.assertEquals(0, result3.size()); } @Test public void missingUrlShouldReturnEmpty() { String message = "Patch Set 1:\r\nBuild Started"; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(0, results.size()); } @Test public void emptyCommentShouldReturnEmpty() { String message = ""; ImmutableList<BuildResult> results = parser.getBuildResult(message); Assert.assertEquals(0, results.size()); } @Test public void multipleJobNamesInCommentAreParsedCorrectly() { /* Hudson CI Patch Set 1: Verified+1 Build Successful https://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars/2434/ : SUCCESS https://hudson.eclipse.org/sirius/job/sirius.gerrit.build-mars/2584/ : SUCCESS */ String multipleJobMessage = "Patch Set 1: Verified+1\r\nBuild Successful \r\nhttps://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars/2434/ : SUCCESS\r\nhttps://hudson.eclipse.org/sirius/job/sirius.gerrit.build-mars/2584/ : SUCCESS"; ImmutableList<BuildResult> results = parser.getBuildResult(multipleJobMessage); Assert.assertEquals(2, results.size()); BuildResult result1 = results.get(0); BuildResult result2 = results.get(1); Assert.assertEquals(1, result1.getPatchSetNumber()); Assert.assertEquals(2434, result1.getBuildNumber()); Assert.assertEquals("https://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars/2434/", result1.getBuildUrl()); Assert.assertEquals("https://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars", result1.getJobName()); Assert.assertEquals(BuildStatus.SUCCESS, result1.getBuildStatus()); Assert.assertEquals(1, result2.getPatchSetNumber()); Assert.assertEquals(2584, result2.getBuildNumber()); Assert.assertEquals("https://hudson.eclipse.org/sirius/job/sirius.gerrit.build-mars/2584/", result2.getBuildUrl()); Assert.assertEquals("https://hudson.eclipse.org/sirius/job/sirius.gerrit.build-mars", result2.getJobName()); Assert.assertEquals(BuildStatus.SUCCESS, result2.getBuildStatus()); } @Test public void multipleJobNamesWithBadDataIgnoresBadResults() { String multipleJobMessage = "Patch Set 1: Verified+1\r\nBuild Successful \r\nhttps://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars/2434/ : SUCCESS\r\nhttps://hudson.eclipse.org/sirius/job/sirius.gerrit.build-mars"; ImmutableList<BuildResult> results = parser.getBuildResult(multipleJobMessage); Assert.assertEquals(1, results.size()); BuildResult result1 = results.get(0); Assert.assertEquals(1, result1.getPatchSetNumber()); Assert.assertEquals(2434, result1.getBuildNumber()); Assert.assertEquals("https://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars/2434/", result1.getBuildUrl()); Assert.assertEquals("https://hudson.eclipse.org/sirius/job/sirius.gerrit.tests-mars", result1.getJobName()); Assert.assertEquals(BuildStatus.SUCCESS, result1.getBuildStatus()); } }