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