tests for LocateNuGetConfigBuildProcess
authorEugene.Petrenko <eugene.petrenko@gmail.com>
Thu, 7 Jul 2011 21:33:52 +0000 (01:33 +0400)
committerEugene.Petrenko <eugene.petrenko@gmail.com>
Thu, 7 Jul 2011 21:33:52 +0000 (01:33 +0400)
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/LocateNuGetConfigBuildProcess.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/install/impl/PackageInstallParametersFactoryImpl.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/util/BuildProcessBase.java
nuget-agent/src/jetbrains/buildServer/nuget/agent/util/DelegatingBuildProcess.java
nuget-tests/src/jetbrains/buildServer/nuget/tests/LoggingTestCase.java [new file with mode: 0644]
nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/LocateNuGetConfigBuildProcessTest.java [new file with mode: 0644]
nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/StartsWithMatcher.java [new file with mode: 0644]
nuget-tests/src/jetbrains/buildServer/nuget/tests/util/BuildProcessTestCase.java

index a230c622eea9df8d33a971c70bdc31960ddbccf8..af32be504dd6a3b1c378fbe6c55a2c5dcfa4272e 100644 (file)
@@ -61,16 +61,17 @@ public class LocateNuGetConfigBuildProcess extends BuildProcessBase {
     void onPackagesConfigFound(@NotNull final File config, @NotNull final File targetFolder);\r
   }\r
 \r
+  @NotNull\r
   @Override\r
   protected BuildFinishedStatus waitForImpl() throws RunBuildException {\r
     final File sln = myContext.getSolutionFile();\r
-    final File packages = new File(sln, "packages");\r
+    final File packages = new File(sln.getParentFile(), "packages");\r
     final File repositoriesConfig = new File(packages, "repositories.config");\r
 \r
     LOG.debug("resources.config path is " + repositoriesConfig);\r
 \r
     if (!repositoriesConfig.isFile()) {\r
-      throw new RunBuildException("Failed to find " + repositoriesConfig);\r
+      throw new RunBuildException("Failed to find repositories.config at " + repositoriesConfig);\r
     }\r
 \r
     myLogger.message("Found packages folder: " + packages);\r
@@ -86,7 +87,7 @@ public class LocateNuGetConfigBuildProcess extends BuildProcessBase {
       myCallback.onPackagesConfigFound(file, packages);\r
     }\r
 \r
-    return null;\r
+    return BuildFinishedStatus.FINISHED_SUCCESS;\r
   }\r
 \r
   @NotNull\r
@@ -108,7 +109,7 @@ public class LocateNuGetConfigBuildProcess extends BuildProcessBase {
         }\r
       }.parse(repositoriesConfig);\r
     } catch (IOException e) {\r
-      throw new RunBuildException("Failed to parse " + repositoriesConfig + ". " + e.getMessage(), e);\r
+      throw new RunBuildException("Failed to parse repositories.config at " + repositoriesConfig + ". " + e.getMessage(), e);\r
     }\r
 \r
     return files;\r
index 8e15f88cf698af00f6292472580e8517e0dca61a..58d60edb453c0de8fb127dbbd230f64c87af1413 100644 (file)
@@ -41,14 +41,14 @@ public class PackageInstallParametersFactoryImpl implements PackageInstallParame
   public PackagesInstallParameters loadParameters(@NotNull final BuildRunnerContext context) throws RunBuildException {\r
     return new PackagesInstallParameters() {\r
 \r
-      private File resolvePath(@Nullable final String runnerParameter) throws RunBuildException {\r
+      private File resolvePath(@Nullable final String runnerParameter, @NotNull String name) throws RunBuildException {\r
         String path = context.getRunnerParameters().get(runnerParameter);\r
         if (StringUtil.isEmptyOrSpaces(path))\r
           throw new RunBuildException("Runner parameter '" + runnerParameter + "' was not found");\r
 \r
         File file = FileUtil.resolvePath(context.getBuild().getCheckoutDirectory(), path);\r
         if (!file.exists()) {\r
-          throw new RunBuildException("File does not exists: " + file);\r
+          throw new RunBuildException("Failed to find " + name + " at " + file);\r
         }\r
 \r
         return file;\r
@@ -57,12 +57,12 @@ public class PackageInstallParametersFactoryImpl implements PackageInstallParame
 \r
       @NotNull\r
       public File getSolutionFile() throws RunBuildException {\r
-        return resolvePath(PackagesInstallerConstants.SLN_PATH);\r
+        return resolvePath(PackagesInstallerConstants.SLN_PATH, "Visual Studio .sln file");\r
       }\r
 \r
       @NotNull\r
       public File getNuGetExeFile() throws RunBuildException {\r
-        return resolvePath(PackagesInstallerConstants.NUGET_PATH);\r
+        return resolvePath(PackagesInstallerConstants.NUGET_PATH, "nuget.exe");\r
       }\r
 \r
       @NotNull\r
index 05e597984cfe3ff3621e921b2fe7956e47c80ebb..f6f1450f4a66d1e3479eb88ca77b6b1e39bc5d39 100644 (file)
@@ -57,6 +57,7 @@ public abstract class BuildProcessBase implements BuildProcess {
     }\r
   }\r
 \r
+  @NotNull\r
   protected abstract BuildFinishedStatus waitForImpl() throws RunBuildException;\r
 \r
   protected void interruptImpl() {\r
index a82171794ba807179135e214d63b24333db3a778..26dd24bfe94666f735c424de03829c5f79dbb1f0 100644 (file)
@@ -42,6 +42,7 @@ public class DelegatingBuildProcess extends BuildProcessBase {
     if (process != null) process.interrupt();\r
   }\r
 \r
+  @NotNull\r
   @Override\r
   protected final BuildFinishedStatus waitForImpl() throws RunBuildException {\r
     try {\r
diff --git a/nuget-tests/src/jetbrains/buildServer/nuget/tests/LoggingTestCase.java b/nuget-tests/src/jetbrains/buildServer/nuget/tests/LoggingTestCase.java
new file mode 100644 (file)
index 0000000..9d18fb1
--- /dev/null
@@ -0,0 +1,35 @@
+package jetbrains.buildServer.nuget.tests;\r
+\r
+import jetbrains.buildServer.BaseTestCase;\r
+import jetbrains.buildServer.util.StringUtil;\r
+import org.jetbrains.annotations.NotNull;\r
+import org.testng.Assert;\r
+import org.testng.annotations.BeforeMethod;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 07.07.11 21:18\r
+ */\r
+public class LoggingTestCase extends BaseTestCase {\r
+  private List<String> myLog;\r
+\r
+  protected synchronized void log(@NotNull String message) {\r
+    myLog.add(message);\r
+  }\r
+\r
+  @BeforeMethod\r
+  @Override\r
+  protected void setUp() throws Exception {\r
+    super.setUp();\r
+    myLog = new ArrayList<String>();\r
+  }\r
+\r
+  protected void assertLog(String... gold) {\r
+    String actual = StringUtil.join(myLog, "\n");\r
+    String expected = StringUtil.join(gold, "\n");\r
+    Assert.assertEquals(actual, expected);\r
+  }\r
+}\r
diff --git a/nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/LocateNuGetConfigBuildProcessTest.java b/nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/LocateNuGetConfigBuildProcessTest.java
new file mode 100644 (file)
index 0000000..da2c5ba
--- /dev/null
@@ -0,0 +1,174 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.tests.agent;\r
+\r
+import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.agent.BuildFinishedStatus;\r
+import jetbrains.buildServer.agent.BuildProgressLogger;\r
+import jetbrains.buildServer.nuget.agent.install.LocateNuGetConfigBuildProcess;\r
+import jetbrains.buildServer.nuget.agent.install.PackagesInstallParameters;\r
+import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
+import jetbrains.buildServer.util.FileUtil;\r
+import org.jmock.Expectations;\r
+import org.jmock.Mockery;\r
+import org.testng.annotations.BeforeMethod;\r
+import org.testng.annotations.Test;\r
+\r
+import java.io.File;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 07.07.11 20:49\r
+ */\r
+public class LocateNuGetConfigBuildProcessTest extends BuildProcessTestCase {\r
+  private File myRoot;\r
+  private Mockery m;\r
+  private BuildProgressLogger log;\r
+  private PackagesInstallParameters ps;\r
+  private LocateNuGetConfigBuildProcess.Callback cb;\r
+  private LocateNuGetConfigBuildProcess proc;\r
+\r
+  @BeforeMethod\r
+  @Override\r
+  protected void setUp() throws Exception {\r
+    super.setUp();\r
+    myRoot = createTempDir();\r
+    m = new Mockery();\r
+    log = m.mock(BuildProgressLogger.class);\r
+    ps = m.mock(PackagesInstallParameters.class);\r
+    cb = m.mock(LocateNuGetConfigBuildProcess.Callback.class);\r
+    proc = new LocateNuGetConfigBuildProcess(ps, log, cb);\r
+  }\r
+\r
+  @Test\r
+  public void test_no_solutionFile() throws RunBuildException {\r
+    m.checking(new Expectations() {{\r
+      allowing(ps).getSolutionFile();\r
+      will(returnValue(new File(myRoot, "foo.sln")));\r
+    }});\r
+\r
+    assertRunException(proc, "Failed to find");\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_only_solutionFile() throws RunBuildException {\r
+    final File sln = new File(myRoot, "foo.sln");\r
+\r
+    FileUtil.writeFile(sln, "Fake solution file");\r
+    m.checking(new Expectations() {{\r
+      allowing(ps).getSolutionFile();\r
+      will(returnValue(sln));\r
+    }});\r
+\r
+    assertRunException(proc, "Failed to find repositories.config");\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_solutionFile_packages_empty() throws RunBuildException {\r
+    final File sln = new File(myRoot, "foo.sln");\r
+    final File packages = new File(sln, "../packages");\r
+    packages.mkdirs();\r
+\r
+    FileUtil.writeFile(sln, "Fake solution file");\r
+    m.checking(new Expectations() {{\r
+      allowing(ps).getSolutionFile();\r
+      will(returnValue(sln));\r
+    }});\r
+\r
+    assertRunException(proc, "Failed to find repositories.config");\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_solutionFile_repositories_config_empty() throws RunBuildException {\r
+    final File sln = new File(myRoot, "foo.sln");\r
+    final File packages = new File(sln.getParentFile(), "packages");\r
+    packages.mkdirs();\r
+    final File repositories = new File(packages, "repositories.config");\r
+\r
+    FileUtil.writeFile(repositories, "<foo />");\r
+\r
+    FileUtil.writeFile(sln, "Fake solution file");\r
+    m.checking(new Expectations() {{\r
+      allowing(ps).getSolutionFile();\r
+      will(returnValue(sln));\r
+\r
+      allowing(log).message(with(new StartsWithMatcher("Found packages folder: ")));\r
+      allowing(log).message(with(new StartsWithMatcher("Found list of packages.config files: ")));\r
+      allowing(log).warning(with(new StartsWithMatcher("No packages.config files were found under solution.")));\r
+    }});\r
+\r
+    assertRunSuccessfully(proc, BuildFinishedStatus.FINISHED_SUCCESS);\r
+    m.assertIsSatisfied();\r
+  }\r
+  @Test\r
+  public void test_solutionFile_repositories_config_empty2() throws RunBuildException {\r
+    final File sln = new File(myRoot, "foo.sln");\r
+    final File packages = new File(sln.getParentFile(), "packages");\r
+    packages.mkdirs();\r
+    final File repositories = new File(packages, "repositories.config");\r
+\r
+    FileUtil.writeFile(repositories, "<foo /");\r
+\r
+    FileUtil.writeFile(sln, "Fake solution file");\r
+    m.checking(new Expectations() {{\r
+      allowing(ps).getSolutionFile();\r
+      will(returnValue(sln));\r
+\r
+      allowing(log).message(with(new StartsWithMatcher("Found packages folder: ")));\r
+      allowing(log).message(with(new StartsWithMatcher("Found list of packages.config files: ")));\r
+      allowing(log).warning(with(new StartsWithMatcher("No packages.config files were found under solution.")));\r
+    }});\r
+\r
+    assertRunException(proc, "Failed to parse repositories.config at ");\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+  @Test\r
+  public void test_solutionFile_repositories_config_no_packages_config() throws RunBuildException {\r
+    final File sln = new File(myRoot, "foo.sln");\r
+    final File packages = new File(sln.getParentFile(), "packages");\r
+    packages.mkdirs();\r
+    final File repositories = new File(packages, "repositories.config");\r
+\r
+    FileUtil.writeFile(repositories,\r
+            "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +\r
+            "<repositories>\n" +\r
+            "  <repository path=\"..\\Mvc\\packages.config\" />\n" +\r
+            "  <repository path=\"c:\\Mvc2\\packages.config\" />\n" +\r
+            "</repositories>");\r
+\r
+    FileUtil.writeFile(sln, "Fake solution file");\r
+    m.checking(new Expectations() {{\r
+      allowing(ps).getSolutionFile();\r
+      will(returnValue(sln));\r
+\r
+      oneOf(cb).onPackagesConfigFound(new File(myRoot, "Mvc/packages.config"), packages);\r
+      oneOf(cb).onPackagesConfigFound(new File("c:\\Mvc2/packages.config"), packages);\r
+\r
+      allowing(log).message(with(new StartsWithMatcher("Found packages folder: ")));\r
+      allowing(log).message(with(new StartsWithMatcher("Found list of packages.config files: ")));\r
+      allowing(log).warning(with(new StartsWithMatcher("No packages.config files were found under solution.")));\r
+    }});\r
+\r
+    assertRunSuccessfully(proc, BuildFinishedStatus.FINISHED_SUCCESS);\r
+    m.assertIsSatisfied();\r
+  }\r
+\r
+}\r
diff --git a/nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/StartsWithMatcher.java b/nuget-tests/src/jetbrains/buildServer/nuget/tests/agent/StartsWithMatcher.java
new file mode 100644 (file)
index 0000000..5d3c908
--- /dev/null
@@ -0,0 +1,41 @@
+/*\r
+ * Copyright 2000-2011 JetBrains s.r.o.\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+\r
+package jetbrains.buildServer.nuget.tests.agent;\r
+\r
+import org.hamcrest.BaseMatcher;\r
+import org.hamcrest.Description;\r
+import org.jetbrains.annotations.NotNull;\r
+\r
+/**\r
+* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+* Date: 08.07.11 1:15\r
+*/\r
+public class StartsWithMatcher extends BaseMatcher<String> {\r
+  private final String myPrefix;\r
+\r
+  StartsWithMatcher(@NotNull final String prefix) {\r
+    myPrefix = prefix;\r
+  }\r
+\r
+  public boolean matches(Object o) {\r
+    return o instanceof String && ((String) o).startsWith(myPrefix);\r
+  }\r
+\r
+  public void describeTo(Description description) {\r
+    description.appendText("String starts with ").appendValue(myPrefix);\r
+  }\r
+}\r
index 850aeaee6129d02ebe7fc6921eca83b972bac4fe..a959135ef5fe76c95fe583a30acd73c24ce82591 100644 (file)
 \r
 package jetbrains.buildServer.nuget.tests.util;\r
 \r
-import jetbrains.buildServer.BaseTestCase;\r
 import jetbrains.buildServer.RunBuildException;\r
 import jetbrains.buildServer.agent.BuildFinishedStatus;\r
 import jetbrains.buildServer.agent.BuildProcess;\r
-import jetbrains.buildServer.util.StringUtil;\r
+import jetbrains.buildServer.nuget.tests.LoggingTestCase;\r
 import org.jetbrains.annotations.NotNull;\r
 import org.jetbrains.annotations.Nullable;\r
 import org.testng.Assert;\r
-import org.testng.annotations.BeforeMethod;\r
 import org.testng.annotations.DataProvider;\r
 \r
 import java.util.ArrayList;\r
@@ -34,19 +32,7 @@ import java.util.List;
  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
  * Date: 07.07.11 20:08\r
  */\r
-public class BuildProcessTestCase extends BaseTestCase {\r
-  private List<String> myLog;\r
-\r
-  protected synchronized void log(@NotNull String message) {\r
-    myLog.add(message);\r
-  }\r
-\r
-  @BeforeMethod\r
-  @Override\r
-  protected void setUp() throws Exception {\r
-    super.setUp();\r
-    myLog = new ArrayList<String>();\r
-  }\r
+public class BuildProcessTestCase extends LoggingTestCase {\r
 \r
   @DataProvider(name = "buildFinishStatuses")\r
   public Object[][] buildStatuses() {\r
@@ -75,16 +61,10 @@ public class BuildProcessTestCase extends BaseTestCase {
       proc.waitFor();\r
       Assert.fail("Exception expected");\r
     } catch (RunBuildException e) {\r
-      Assert.assertEquals(message, e.getMessage());\r
+      Assert.assertTrue(e.getMessage().contains(message), e.toString());\r
     }\r
   }\r
 \r
-  protected void assertLog(String... gold) {\r
-    String actual = StringUtil.join(myLog, "\n");\r
-    String expected = StringUtil.join(gold, "\n");\r
-    Assert.assertEquals(actual, expected);\r
-  }\r
-\r
   /**\r
   * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
   * Date: 07.07.11 20:07\r