/* Copyright 2014 Google Inc. All rights reserved.
*
* Licensed 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 com.google.jenkins.flakyTestHandler.plugin.deflake;
import com.google.jenkins.flakyTestHandler.plugin.deflake.DeflakeActionIntegrationTest.FailingTestResultAction;
import org.junit.Test;
import java.util.Arrays;
import java.util.List;
import hudson.model.AbstractBuild;
import hudson.model.Cause.UserCause;
import hudson.model.FreeStyleProject;
import hudson.model.Result;
import hudson.plugins.git.AbstractGitTestCase;
import hudson.plugins.git.BranchSpec;
import hudson.plugins.git.GitSCM;
/**
* Test {@link DeflakeGitBuildChooser} will choose previous failing build
*
* @author Qingzhou Luo
*/
public class DeflakeGitBuildChooserTest extends AbstractGitTestCase {
final String commitFile1 = "commitFile1";
final String commitFile2 = "commitFile2";
@Test
public void testDeflakeCheckoutFailingRevision() throws Exception {
FreeStyleProject project = setupProject(Arrays.asList(
new BranchSpec("master")
));
DeflakeCause deflakeCause = initRepoWithDeflakeBuild(project);
// Checkout without deflake cause will see the newly committed file
build(project, Result.SUCCESS, commitFile2);
// Checkout with deflake cause will only see the first file
AbstractBuild deflakeBuild = project.scheduleBuild2(0, deflakeCause,
new FailingTestResultAction()).get();
assertTrue("could not see the old committed file",
deflakeBuild.getWorkspace().child(commitFile1).exists());
assertFalse("should not see the newly committed file",
deflakeBuild.getWorkspace().child(commitFile2).exists());
}
private DeflakeCause initRepoWithDeflakeBuild(FreeStyleProject project)
throws InterruptedException, java.util.concurrent.ExecutionException {
commit(commitFile1, johnDoe, "Commit number 1");
// First failing build
AbstractBuild build = project.scheduleBuild2(0, new UserCause(), new FailingTestResultAction())
.get();
// Set up deflake cause of previous failing build
DeflakeCause deflakeCause = new DeflakeCause(build);
// Make another commit after failing build
commit(commitFile2, janeDoe, "Commit number 2");
return deflakeCause;
}
private FreeStyleProject setupProject(List<BranchSpec> specs) throws Exception {
FreeStyleProject project = setupProject(specs, false, null, null, null, null, false, null);
assertNotNull("could not init project", project);
// Use DeflakeGitBuildChooser
DeflakeGitBuildChooser chooser = new DeflakeGitBuildChooser();
chooser.gitSCM = (GitSCM) project.getScm();
chooser.gitSCM.setBuildChooser(chooser);
return project;
}
}