polish integration test
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / integration / IntegrationTestBase.java
1 /*\r
2  * Copyright 2000-2011 JetBrains s.r.o.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  */\r
16 \r
17 package jetbrains.buildServer.nuget.tests.integration;\r
18 \r
19 import com.intellij.execution.configurations.GeneralCommandLine;\r
20 import jetbrains.buildServer.ExecResult;\r
21 import jetbrains.buildServer.RunBuildException;\r
22 import jetbrains.buildServer.SimpleCommandLineProcessRunner;\r
23 import jetbrains.buildServer.agent.*;\r
24 import jetbrains.buildServer.nuget.agent.parameters.*;\r
25 import jetbrains.buildServer.nuget.agent.util.BuildProcessBase;\r
26 import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
27 import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
28 import org.jetbrains.annotations.NotNull;\r
29 import org.jmock.Expectations;\r
30 import org.jmock.Mockery;\r
31 import org.testng.annotations.BeforeMethod;\r
32 \r
33 import java.io.File;\r
34 import java.util.Collection;\r
35 \r
36 /**\r
37  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
38  * Date: 22.07.11 1:26\r
39  */\r
40 public class IntegrationTestBase extends BuildProcessTestCase {\r
41   private StringBuilder myCommandsOutput;\r
42   protected File myRoot;\r
43   protected Mockery m;\r
44   protected AgentRunningBuild myBuild;\r
45   protected BuildRunnerContext myContext;\r
46   protected BuildProgressLogger myLogger;\r
47   protected PackagesParametersFactory myParametersFactory;\r
48   protected PackagesInstallParameters myInstall;\r
49   protected PackagesUpdateParameters myUpdate;\r
50   protected NuGetPublishParameters myPublishParameters;\r
51   protected NuGetFetchParameters myNuGet;\r
52   private BuildProcess myMockProcess;\r
53 \r
54   @NotNull\r
55   protected String getCommandsOutput() {\r
56     return myCommandsOutput.toString();\r
57   }\r
58 \r
59   @BeforeMethod\r
60   @Override\r
61   protected void setUp() throws Exception {\r
62     super.setUp();\r
63     myCommandsOutput = new StringBuilder();\r
64     myRoot = createTempDir();\r
65     m = new Mockery();\r
66     myBuild = m.mock(AgentRunningBuild.class);\r
67     myContext = m.mock(BuildRunnerContext.class);\r
68     myLogger = m.mock(BuildProgressLogger.class);\r
69     myParametersFactory = m.mock(PackagesParametersFactory.class);\r
70     myInstall = m.mock(PackagesInstallParameters.class);\r
71     myUpdate = m.mock(PackagesUpdateParameters.class);\r
72     myMockProcess = m.mock(BuildProcess.class);\r
73     myNuGet = m.mock(NuGetFetchParameters.class);\r
74     myPublishParameters = m.mock(NuGetPublishParameters.class);\r
75 \r
76     m.checking(new Expectations() {{\r
77       allowing(myContext).getBuild();\r
78       will(returnValue(myBuild));\r
79       allowing(myBuild).getBuildLogger();\r
80       will(returnValue(myLogger));\r
81       allowing(myBuild).getCheckoutDirectory();\r
82       will(returnValue(myRoot));\r
83 \r
84       allowing(myMockProcess).start();\r
85       allowing(myMockProcess).waitFor();\r
86       will(returnValue(BuildFinishedStatus.FINISHED_SUCCESS));\r
87 \r
88       allowing(myLogger).message(with(any(String.class)));\r
89       allowing(myLogger).activityStarted(with(equal("install")), with(any(String.class)), with(any(String.class)));\r
90       allowing(myLogger).activityFinished(with(equal("install")), with(any(String.class)));\r
91 \r
92       allowing(myInstall).getNuGetParameters();\r
93       will(returnValue(myNuGet));\r
94       allowing(myUpdate).getNuGetParameters();\r
95       will(returnValue(myNuGet));\r
96     }});\r
97   }\r
98 \r
99   @NotNull\r
100   protected File getTestDataPath(final String path) {\r
101     return Paths.getTestDataPath("integration/" + path);\r
102   }\r
103 \r
104   protected CommandlineBuildProcessFactory executingFactory() {\r
105     return new CommandlineBuildProcessFactory() {\r
106       public BuildProcess executeCommandLine(@NotNull final BuildRunnerContext hostContext,\r
107                                              @NotNull final File program,\r
108                                              @NotNull final Collection<String> argz,\r
109                                              @NotNull final File workingDir) throws RunBuildException {\r
110         return new BuildProcessBase() {\r
111           @NotNull\r
112           @Override\r
113           protected BuildFinishedStatus waitForImpl() throws RunBuildException {\r
114             GeneralCommandLine cmd = new GeneralCommandLine();\r
115             cmd.setExePath(program.getPath());\r
116             for (String arg : argz) {\r
117               cmd.addParameter(arg);\r
118             }\r
119             cmd.setWorkingDirectory(workingDir);\r
120 \r
121             System.out.println("Run: " + cmd.getCommandLineString());\r
122 \r
123             ExecResult result = SimpleCommandLineProcessRunner.runCommand(cmd, new byte[0]);\r
124 \r
125             System.out.println(result.getStdout());\r
126             System.out.println(result.getStderr());\r
127 \r
128             myCommandsOutput.append(result.getStdout()).append("\n\n").append(result.getStderr()).append("\n\n");\r
129 \r
130             return result.getExitCode() == 0\r
131                     ? BuildFinishedStatus.FINISHED_SUCCESS\r
132                     : BuildFinishedStatus.FINISHED_FAILED;\r
133           }\r
134         };\r
135       }\r
136     };\r
137   }\r
138 }\r