/******************************************************************************* * Copyright (c) 2014, 2016 IBM Corporation 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package com.ibm.team.build.internal.hjplugin.tests; import java.util.Collections; import java.util.Map; import java.util.Set; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.JenkinsRule.WebClient; import org.junit.Assert; import static org.junit.Assert.assertTrue; import static org.junit.Assert.assertEquals; import com.ibm.team.build.internal.hjplugin.InvalidCredentialsException; import com.ibm.team.build.internal.hjplugin.RTCBuildResultAction; import com.ibm.team.build.internal.hjplugin.RTCBuildToolInstallation; import com.ibm.team.build.internal.hjplugin.RTCFacadeFactory.RTCFacadeWrapper; import com.ibm.team.build.internal.hjplugin.RTCLoginInfo; import com.ibm.team.build.internal.hjplugin.RTCScm; import com.ibm.team.build.internal.hjplugin.RTCScm.BuildType; import com.ibm.team.build.internal.hjplugin.tests.utils.AbstractTestCase; import com.ibm.team.build.internal.hjplugin.tests.utils.Utils; import com.ibm.team.build.internal.hjplugin.util.RTCBuildResultHelper; import com.ibm.team.build.internal.hjplugin.util.RTCBuildStatus; import hudson.model.FreeStyleProject; import hudson.util.Secret; public class RTCBuildResultHelperIT extends AbstractTestCase { public static final String ARTIFACT_BUILD_RESULT_ITEM_ID = "buildResultItemId"; @Rule public JenkinsRule j = new JenkinsRule(); private RTCFacadeWrapper testingFacade; @Before public void setUp() throws Exception { if (Config.DEFAULT.isConfigured()) { testingFacade = Utils.getTestingFacade(); } } /** * Test that the Helper class called by the listeners to build deletions * (deletion of an individual build or a project with builds) will behave * when working with builds that are for workspaces only as well as a build definition. * Detailed testing of the util that finds the RTCScm config is in RTCScmConfigHelperIT * Detailed testing of the actual delete of the build result in RTC is in BuildConnectionIT * @throws Exception If the test fails */ @Test public void testdeleteRTCBuildResults() throws Exception { if (Config.DEFAULT.isConfigured()) { RTCLoginInfo loginInfo = Config.DEFAULT.getLoginInfo(); Map<String, String> setupArtifacts = (Map<String, String>) testingFacade.invoke( "testBuildTerminationSetup", new Class[] { String.class, // serverURL, String.class, // userId, String.class, // password, int.class, // timeout, String.class}, // testName loginInfo.getServerUri(), loginInfo.getUserId(), loginInfo.getPassword(), loginInfo.getTimeout(), getBuildDefinitionUniqueName()); try { // start & delete in progress build (status ok) avoiding toolkit setupBuildTerminationTest(loginInfo, true, false, RTCBuildStatus.OK.name(), setupArtifacts); String buildResultUUID = setupArtifacts.get(ARTIFACT_BUILD_RESULT_ITEM_ID); FreeStyleProject project = j.createFreeStyleProject(); RTCScm scm = getRTCScm(); project.setScm(scm); Set<RTCScm> rtcScmConfigs = Collections.singleton(scm); RTCBuildResultAction action = new RTCBuildResultAction(loginInfo.getServerUri(), buildResultUUID, true, null); RTCBuildResultHelper.deleteRTCBuildResults(Collections.singletonList(action), project, rtcScmConfigs); verifyBuildResultDeleted(loginInfo, setupArtifacts); // test an action that does not have a build result uuid - should not fail action = new RTCBuildResultAction(loginInfo.getServerUri(), null, true, null); RTCBuildResultHelper.deleteRTCBuildResults(Collections.singletonList(action), project, rtcScmConfigs); } finally { // clean up testingFacade.invoke( "tearDown", new Class[] { String.class, // serverURL, String.class, // userId, String.class, // password, int.class, // timeout, Map.class}, // setupArtifacts loginInfo.getServerUri(), loginInfo.getUserId(), loginInfo.getPassword(), loginInfo.getTimeout(), setupArtifacts); } } } private RTCScm getRTCScm() throws InvalidCredentialsException { RTCBuildToolInstallation tool = new RTCBuildToolInstallation("config_toolkit", Config.DEFAULT.getToolkit(), Collections.EMPTY_LIST); tool.getDescriptor().setInstallations(tool); RTCLoginInfo loginInfo = Config.DEFAULT.getLoginInfo(); BuildType buildType = new BuildType(RTCScm.BUILD_DEFINITION_TYPE, "SomeBuildDefinition", null, null, ""); RTCScm scm = new RTCScm(true, "config_toolkit", loginInfo.getServerUri(), loginInfo.getTimeout(), loginInfo.getUserId(), Secret.fromString(loginInfo.getPassword()), "", "", buildType , false); return scm; } private void setupBuildTerminationTest( RTCLoginInfo loginInfo, boolean startBuild, boolean abandon, String buildStatus, Map<String, String> setupArtifacts) throws Exception { testingFacade.invoke( "testBuildTerminationTestSetup", new Class[] { String.class, // serverURL, String.class, // userId, String.class, // password, int.class, // timeout, boolean.class, //startBuild, boolean.class, // abandon, String.class, // buildStatus, Map.class}, // artifactIds loginInfo.getServerUri(), loginInfo.getUserId(), loginInfo.getPassword(), loginInfo.getTimeout(), startBuild, abandon, buildStatus, setupArtifacts); } private void verifyBuildResultDeleted(RTCLoginInfo loginInfo, Map<String, String> setupArtifacts) throws Exception { testingFacade.invoke( "verifyBuildResultDeleted", new Class[] { String.class, // serverURL, String.class, // userId, String.class, // password, int.class, // timeout, Map.class}, // artifactIds loginInfo.getServerUri(), loginInfo.getUserId(), loginInfo.getPassword(), loginInfo.getTimeout(), setupArtifacts); } }