fix test
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / integration / InstallPackageIntegtatoinTest.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.install.PackageInstallParametersFactory;\r
25 import jetbrains.buildServer.nuget.agent.install.PackagesInstallParameters;\r
26 import jetbrains.buildServer.nuget.agent.install.PackagesInstallerRunner;\r
27 import jetbrains.buildServer.nuget.agent.install.impl.NuGetInstallPackageActionFactoryImpl;\r
28 import jetbrains.buildServer.nuget.agent.util.BuildProcessBase;\r
29 import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
30 import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
31 import jetbrains.buildServer.util.ArchiveUtil;\r
32 import jetbrains.buildServer.util.FileUtil;\r
33 import junit.framework.Assert;\r
34 import org.jetbrains.annotations.NotNull;\r
35 import org.jmock.Expectations;\r
36 import org.jmock.Mockery;\r
37 import org.testng.annotations.BeforeMethod;\r
38 import org.testng.annotations.Test;\r
39 \r
40 import java.io.File;\r
41 import java.util.Arrays;\r
42 import java.util.Collection;\r
43 import java.util.Collections;\r
44 import java.util.List;\r
45 \r
46 /**\r
47  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
48  * Date: 08.07.11 2:15\r
49  */\r
50 public class InstallPackageIntegtatoinTest extends BuildProcessTestCase {\r
51   private File myRoot;\r
52   private Mockery m;\r
53   private AgentRunningBuild myBuild;\r
54   private BuildRunnerContext myContext;\r
55   private BuildProgressLogger myLogger;\r
56   private PackageInstallParametersFactory myParametersFactory;\r
57   private PackagesInstallParameters myParameters;\r
58   private BuildProcess myMockProcess;\r
59 \r
60   @BeforeMethod\r
61   @Override\r
62   protected void setUp() throws Exception {\r
63     super.setUp();\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(PackageInstallParametersFactory.class);\r
70     myParameters = m.mock(PackagesInstallParameters.class);\r
71     myMockProcess = m.mock(BuildProcess.class);\r
72 \r
73     m.checking(new Expectations() {{\r
74       allowing(myContext).getBuild();\r
75       will(returnValue(myBuild));\r
76       allowing(myBuild).getBuildLogger();\r
77       will(returnValue(myLogger));\r
78       allowing(myBuild).getCheckoutDirectory();\r
79       will(returnValue(myRoot));\r
80 \r
81       allowing(myMockProcess).start();\r
82       allowing(myMockProcess).waitFor();\r
83       will(returnValue(BuildFinishedStatus.FINISHED_SUCCESS));\r
84 \r
85       allowing(myLogger).message(with(any(String.class)));\r
86       allowing(myLogger).activityStarted(with(equal("install")), with(any(String.class)), with(any(String.class)));\r
87       allowing(myLogger).activityFinished(with(equal("install")), with(any(String.class)));\r
88     }});\r
89   }\r
90 \r
91   @Test\r
92   public void test_01_online_sources() throws RunBuildException {\r
93     ArchiveUtil.unpackZip(getTestDataPath("test-01.zip"), "", myRoot);\r
94 \r
95     fetchPackages(new File(myRoot, "sln1-lib.sln"), Collections.<String>emptyList());\r
96 \r
97     List<File> packageses = Arrays.asList(new File(myRoot, "packages").listFiles());\r
98     System.out.println("installed packageses = " + packageses);\r
99 \r
100     Assert.assertTrue(new File(myRoot, "packages/NUnit.2.5.7.10213").isDirectory());\r
101     Assert.assertTrue(new File(myRoot, "packages/NInject.2.2.1.4").isDirectory());\r
102     Assert.assertTrue(new File(myRoot, "packages/Machine.Specifications.0.4.13.0").isDirectory());\r
103     Assert.assertEquals(4, packageses.size());\r
104   }\r
105 \r
106   @Test(enabled = false, dependsOnGroups = "Need to understand how to check NuGet uses only specified sources")\r
107   public void test_01_local_sources() throws RunBuildException {\r
108     ArchiveUtil.unpackZip(getTestDataPath("test-01.zip"), "", myRoot);\r
109     File sourcesDir = new File(myRoot, "js");\r
110     ArchiveUtil.unpackZip(getTestDataPath("test-01-sources.zip"), "", sourcesDir);\r
111 \r
112     fetchPackages(new File(myRoot, "sln1-lib.sln"), Arrays.asList("file:///" + sourcesDir.getPath()));\r
113 \r
114     List<File> packageses = Arrays.asList(new File(myRoot, "packages").listFiles());\r
115     System.out.println("installed packageses = " + packageses);\r
116 \r
117     Assert.assertTrue(new File(myRoot, "packages/NUnit.2.5.7.10213").isDirectory());\r
118     Assert.assertTrue(new File(myRoot, "packages/NInject.2.2.1.4").isDirectory());\r
119     Assert.assertTrue(new File(myRoot, "packages/Machine.Specifications.0.4.13.0").isDirectory());\r
120     Assert.assertEquals(4, packageses.size());\r
121   }\r
122 \r
123   private void fetchPackages(final File sln, final List<String> sources) throws RunBuildException {\r
124     m.checking(new Expectations() {{\r
125       allowing(myParametersFactory).loadParameters(myContext);\r
126       will(returnValue(myParameters));\r
127 \r
128       allowing(myParameters).getNuGetExeFile();\r
129       will(returnValue(getPathToNuGet()));\r
130       allowing(myParameters).getSolutionFile();\r
131       will(returnValue(sln));\r
132       allowing(myParameters).getNuGetPackageSources();\r
133       will(returnValue(sources));\r
134     }});\r
135 \r
136     BuildProcess proc = new PackagesInstallerRunner(\r
137             new NuGetInstallPackageActionFactoryImpl(executingFactory()),\r
138             myParametersFactory\r
139     ).createBuildProcess(myBuild, myContext);\r
140 \r
141     assertRunSuccessfully(proc, BuildFinishedStatus.FINISHED_SUCCESS);\r
142 \r
143     m.assertIsSatisfied();\r
144   }\r
145 \r
146 \r
147   @NotNull\r
148   private File getTestDataPath() {\r
149     return FileUtil.getCanonicalFile(new File("./nuget-tests/testData/integration"));\r
150   }\r
151 \r
152   @NotNull\r
153   private File getTestDataPath(@NotNull final String p) {\r
154     return FileUtil.getCanonicalFile(new File(getTestDataPath(), p));\r
155   }\r
156 \r
157   @NotNull\r
158   private File getPathToNuGet() {\r
159     return FileUtil.getCanonicalFile(new File("./nuget-tests/testData/nuget/1.4/NuGet.exe"));\r
160   }\r
161 \r
162   private CommandlineBuildProcessFactory executingFactory() {\r
163     return new CommandlineBuildProcessFactory() {\r
164       public BuildProcess executeCommandLine(@NotNull final BuildRunnerContext hostContext,\r
165                                              @NotNull final File program,\r
166                                              @NotNull final Collection<String> argz,\r
167                                              @NotNull final File workingDir) throws RunBuildException {\r
168         return new BuildProcessBase() {\r
169           @NotNull\r
170           @Override\r
171           protected BuildFinishedStatus waitForImpl() throws RunBuildException {\r
172             GeneralCommandLine cmd = new GeneralCommandLine();\r
173             cmd.setExePath(program.getPath());\r
174             for (String arg : argz) {\r
175               cmd.addParameter(arg);\r
176             }\r
177             cmd.setWorkingDirectory(workingDir);\r
178 \r
179             System.out.println("Run: " + cmd.getCommandLineString());\r
180 \r
181             ExecResult result = SimpleCommandLineProcessRunner.runCommand(cmd, new byte[0]);\r
182 \r
183             System.out.println(result.getStdout());\r
184             System.out.println(result.getStderr());\r
185 \r
186             return result.getExitCode() == 0\r
187                     ? BuildFinishedStatus.FINISHED_SUCCESS\r
188                     : BuildFinishedStatus.FINISHED_FAILED;\r
189           }\r
190         };\r
191       }\r
192     };\r
193   }\r
194 }\r