233b621d1b79fb8ca410f2a32f618082504a2b54
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / agent / PackagesInstallerBuilderTest.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.agent;\r
18 \r
19 import jetbrains.buildServer.BaseTestCase;\r
20 import jetbrains.buildServer.RunBuildException;\r
21 import jetbrains.buildServer.agent.BuildProcess;\r
22 import jetbrains.buildServer.agent.BuildRunnerContext;\r
23 import jetbrains.buildServer.nuget.agent.install.NuGetActionFactory;\r
24 import jetbrains.buildServer.nuget.agent.install.impl.InstallStages;\r
25 import jetbrains.buildServer.nuget.agent.install.impl.PackagesInstallerBuilder;\r
26 import jetbrains.buildServer.nuget.agent.parameters.NuGetParameters;\r
27 import jetbrains.buildServer.nuget.agent.parameters.PackagesInstallParameters;\r
28 import jetbrains.buildServer.nuget.agent.parameters.PackagesUpdateParameters;\r
29 import jetbrains.buildServer.nuget.agent.util.BuildProcessContinuation;\r
30 import jetbrains.buildServer.nuget.common.PackagesUpdateMode;\r
31 import org.jmock.Expectations;\r
32 import org.jmock.Mockery;\r
33 import org.testng.annotations.BeforeMethod;\r
34 import org.testng.annotations.Test;\r
35 \r
36 import java.io.File;\r
37 \r
38 /**\r
39  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
40  * Date: 18.07.11 20:26\r
41  */\r
42 public class PackagesInstallerBuilderTest extends BaseTestCase {\r
43   private Mockery m;\r
44   private PackagesInstallerBuilder builderUpdate;\r
45   private PackagesInstallerBuilder builderInstall;\r
46   private NuGetActionFactory factory;\r
47   private BuildProcessContinuation install;\r
48   private BuildProcessContinuation update;\r
49   private BuildProcessContinuation postUpdate;\r
50   private BuildProcessContinuation report;\r
51   private BuildRunnerContext context;\r
52   private NuGetParameters nugetSettings;\r
53   private PackagesInstallParameters installParameters;\r
54   private PackagesUpdateParameters updateParameters;\r
55   private File myTaget;\r
56   private File mySln;\r
57   private File myConfig;\r
58   private File myConfig2;\r
59 \r
60   @BeforeMethod\r
61   @Override\r
62   protected void setUp() throws Exception {\r
63     super.setUp();\r
64 \r
65     final File root = createTempDir();\r
66     myTaget = new File(root, "packages"){{mkdirs();}};\r
67     mySln = new File(root, "project.sln") {{createNewFile();}};\r
68     myConfig = new File(new File(root, "project"){{mkdirs();}}, "packages.config"){{createNewFile();}};\r
69     myConfig2 = new File(new File(root, "project2"){{mkdirs();}}, "packages.config"){{createNewFile();}};\r
70 \r
71     m = new Mockery();\r
72     factory = m.mock(NuGetActionFactory.class);\r
73     install = m.mock(BuildProcessContinuation.class, "install");\r
74     update = m.mock(BuildProcessContinuation.class, "update");\r
75     postUpdate = m.mock(BuildProcessContinuation.class, "post-install");\r
76     report = m.mock(BuildProcessContinuation.class, "report");\r
77     context = m.mock(BuildRunnerContext.class);\r
78     installParameters = m.mock(PackagesInstallParameters.class);\r
79     updateParameters = m.mock(PackagesUpdateParameters.class);\r
80     nugetSettings = m.mock(NuGetParameters.class);\r
81 \r
82     final InstallStages is = m.mock(InstallStages.class);\r
83     final BuildProcess reportProcess = m.mock(BuildProcess.class, "report process");\r
84     m.checking(new Expectations(){{\r
85       allowing(is).getInstallStage(); will(returnValue(install));\r
86       allowing(is).getUpdateStage(); will(returnValue(update));\r
87       allowing(is).getPostUpdateStart(); will(returnValue(postUpdate));\r
88       allowing(is).getReportStage(); will(returnValue(report));\r
89 \r
90       allowing(factory).createUsageReport(context, nugetSettings, myConfig, myTaget);\r
91       will(returnValue(reportProcess));\r
92       allowing(factory).createUsageReport(context, nugetSettings, myConfig2, myTaget);\r
93       will(returnValue(reportProcess));\r
94 \r
95       allowing(report).pushBuildProcess(reportProcess);\r
96     }});\r
97 \r
98     builderUpdate = new PackagesInstallerBuilder(\r
99             factory,\r
100             is,\r
101             context,\r
102             installParameters,\r
103             updateParameters\r
104             );\r
105 \r
106     builderInstall = new PackagesInstallerBuilder(\r
107             factory,\r
108             is,\r
109             context,\r
110             installParameters,\r
111             null);\r
112 \r
113     m.checking(new Expectations(){{\r
114       allowing(installParameters).getNuGetParameters(); will(returnValue(nugetSettings));\r
115       allowing(updateParameters).getNuGetParameters(); will(returnValue(nugetSettings));\r
116     }});\r
117   }\r
118 \r
119   @Test\r
120   public void test_install() throws RunBuildException {\r
121     final BuildProcess bp = m.mock(BuildProcess.class, "bp");\r
122     m.checking(new Expectations(){{\r
123       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
124       will(returnValue(bp));\r
125 \r
126       oneOf(install).pushBuildProcess(bp);\r
127     }});\r
128 \r
129     builderInstall.onSolutionFileFound(mySln, myTaget);\r
130     builderInstall.onPackagesConfigFound(myConfig, myTaget);\r
131   }\r
132 \r
133   @Test\r
134   public void test_install_may() throws RunBuildException {\r
135     final BuildProcess bp1 = m.mock(BuildProcess.class, "bp-install-1");\r
136     final BuildProcess bp2 = m.mock(BuildProcess.class, "bp-install-2");\r
137     m.checking(new Expectations(){{\r
138       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
139       will(returnValue(bp1));\r
140       oneOf(factory).createInstall(context, installParameters, myConfig2, myTaget);\r
141       will(returnValue(bp2));\r
142 \r
143       oneOf(install).pushBuildProcess(bp1);\r
144       oneOf(install).pushBuildProcess(bp2);\r
145     }});\r
146 \r
147     builderInstall.onSolutionFileFound(mySln, myTaget);\r
148     builderInstall.onPackagesConfigFound(myConfig, myTaget);\r
149     builderInstall.onPackagesConfigFound(myConfig2, myTaget);\r
150   }\r
151 \r
152   @Test\r
153   public void test_install_update_per_sln() throws RunBuildException {\r
154     final BuildProcess bpInstall = m.mock(BuildProcess.class, "bp-install");\r
155     final BuildProcess bpUpdate = m.mock(BuildProcess.class, "bp-update");\r
156     final BuildProcess bpPostInstall = m.mock(BuildProcess.class, "bp-post-install");\r
157 \r
158     m.checking(new Expectations(){{\r
159       allowing(updateParameters).getUpdateMode();\r
160       will(returnValue(PackagesUpdateMode.FOR_SLN));\r
161 \r
162       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
163       will(returnValue(bpInstall));\r
164 \r
165       oneOf(factory).createUpdate(context, updateParameters, mySln, myTaget);\r
166       will(returnValue(bpUpdate));\r
167 \r
168       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
169       will(returnValue(bpPostInstall));\r
170 \r
171       oneOf(update).pushBuildProcess(bpUpdate);\r
172       oneOf(install).pushBuildProcess(bpInstall);\r
173       oneOf(postUpdate).pushBuildProcess(bpPostInstall);\r
174 \r
175     }});\r
176 \r
177     builderUpdate.onSolutionFileFound(mySln, myTaget);\r
178     builderUpdate.onPackagesConfigFound(myConfig, myTaget);\r
179   }\r
180 \r
181   @Test\r
182   public void test_install_update_per_sln_many() throws RunBuildException {\r
183     final BuildProcess bpInstall1 = m.mock(BuildProcess.class, "bp-install-1");\r
184     final BuildProcess bpInstall2 = m.mock(BuildProcess.class, "bp-install-2");\r
185     final BuildProcess bpUpdate = m.mock(BuildProcess.class, "bp-update");\r
186     final BuildProcess bpPostInstall1 = m.mock(BuildProcess.class, "bp-post-install-1");\r
187     final BuildProcess bpPostInstall2 = m.mock(BuildProcess.class, "bp-post-install-2");\r
188 \r
189     m.checking(new Expectations(){{\r
190       allowing(updateParameters).getUpdateMode();\r
191       will(returnValue(PackagesUpdateMode.FOR_SLN));\r
192 \r
193       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
194       will(returnValue(bpInstall1));\r
195 \r
196       oneOf(factory).createInstall(context, installParameters, myConfig2, myTaget);\r
197       will(returnValue(bpInstall2));\r
198 \r
199       oneOf(factory).createUpdate(context, updateParameters, mySln, myTaget);\r
200       will(returnValue(bpUpdate));\r
201 \r
202       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
203       will(returnValue(bpPostInstall1));\r
204       oneOf(factory).createInstall(context, installParameters, myConfig2, myTaget);\r
205       will(returnValue(bpPostInstall2));\r
206 \r
207       oneOf(update).pushBuildProcess(bpUpdate);\r
208       oneOf(install).pushBuildProcess(bpInstall1);\r
209       oneOf(install).pushBuildProcess(bpInstall2);\r
210       oneOf(postUpdate).pushBuildProcess(bpPostInstall1);\r
211       oneOf(postUpdate).pushBuildProcess(bpPostInstall2);\r
212 \r
213     }});\r
214 \r
215     builderUpdate.onSolutionFileFound(mySln, myTaget);\r
216     builderUpdate.onPackagesConfigFound(myConfig, myTaget);\r
217     builderUpdate.onPackagesConfigFound(myConfig2, myTaget);\r
218   }\r
219   @Test\r
220   public void test_install_update_per_config() throws RunBuildException {\r
221     final BuildProcess bpInstall = m.mock(BuildProcess.class, "bp-install");\r
222     final BuildProcess bpUpdate = m.mock(BuildProcess.class, "bp-update");\r
223     final BuildProcess bpPostInstall = m.mock(BuildProcess.class, "bp-post-install");\r
224 \r
225     m.checking(new Expectations(){{\r
226       allowing(updateParameters).getUpdateMode();\r
227       will(returnValue(PackagesUpdateMode.FOR_EACH_PACKAGES_CONFIG));\r
228 \r
229       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
230       will(returnValue(bpInstall));\r
231 \r
232       oneOf(factory).createUpdate(context, updateParameters, myConfig, myTaget);\r
233       will(returnValue(bpUpdate));\r
234 \r
235       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
236       will(returnValue(bpPostInstall));\r
237 \r
238       oneOf(update).pushBuildProcess(bpUpdate);\r
239       oneOf(install).pushBuildProcess(bpInstall);\r
240       oneOf(postUpdate).pushBuildProcess(bpPostInstall);\r
241 \r
242     }});\r
243 \r
244     builderUpdate.onSolutionFileFound(mySln, myTaget);\r
245     builderUpdate.onPackagesConfigFound(myConfig, myTaget);\r
246   }\r
247 \r
248   @Test\r
249   public void test_install_update_per_config_many() throws RunBuildException {\r
250     final BuildProcess bpInstall1 = m.mock(BuildProcess.class, "bp-install-1");\r
251     final BuildProcess bpInstall2 = m.mock(BuildProcess.class, "bp-install-2");\r
252     final BuildProcess bpUpdate1 = m.mock(BuildProcess.class, "bp-update-1");\r
253     final BuildProcess bpUpdate2 = m.mock(BuildProcess.class, "bp-update-2");\r
254     final BuildProcess bpPostInstall1 = m.mock(BuildProcess.class, "bp-post-install-1");\r
255     final BuildProcess bpPostInstall2 = m.mock(BuildProcess.class, "bp-post-install-2");\r
256 \r
257     m.checking(new Expectations(){{\r
258       allowing(updateParameters).getUpdateMode();\r
259       will(returnValue(PackagesUpdateMode.FOR_EACH_PACKAGES_CONFIG));\r
260 \r
261       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
262       will(returnValue(bpInstall1));\r
263       oneOf(factory).createInstall(context, installParameters, myConfig2, myTaget);\r
264       will(returnValue(bpInstall2));\r
265 \r
266       oneOf(factory).createUpdate(context, updateParameters, myConfig, myTaget);\r
267       will(returnValue(bpUpdate1));\r
268       oneOf(factory).createUpdate(context, updateParameters, myConfig2, myTaget);\r
269       will(returnValue(bpUpdate2));\r
270 \r
271       oneOf(factory).createInstall(context, installParameters, myConfig, myTaget);\r
272       will(returnValue(bpPostInstall1));\r
273       oneOf(factory).createInstall(context, installParameters, myConfig2, myTaget);\r
274       will(returnValue(bpPostInstall2));\r
275 \r
276       oneOf(update).pushBuildProcess(bpUpdate1);\r
277       oneOf(update).pushBuildProcess(bpUpdate2);\r
278       oneOf(install).pushBuildProcess(bpInstall1);\r
279       oneOf(install).pushBuildProcess(bpInstall2);\r
280       oneOf(postUpdate).pushBuildProcess(bpPostInstall1);\r
281       oneOf(postUpdate).pushBuildProcess(bpPostInstall2);\r
282     }});\r
283 \r
284     builderUpdate.onSolutionFileFound(mySln, myTaget);\r
285     builderUpdate.onPackagesConfigFound(myConfig, myTaget);\r
286     builderUpdate.onPackagesConfigFound(myConfig2, myTaget);\r
287   }\r
288 }\r