import jetbrains.buildServer.nuget.agent.commands.CommandFactory;\r
import jetbrains.buildServer.nuget.agent.parameters.*;\r
import jetbrains.buildServer.util.FileUtil;\r
+import jetbrains.buildServer.util.StringUtil;\r
import org.jetbrains.annotations.NotNull;\r
\r
import java.io.File;\r
-import java.util.ArrayList;\r
-import java.util.Arrays;\r
-import java.util.Collection;\r
-import java.util.List;\r
+import java.util.*;\r
\r
/**\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
@NotNull final File packagePath,\r
@NotNull final Callback<T> factory) throws RunBuildException {\r
final List<String> arguments = new ArrayList<String>();\r
+ arguments.add("push");\r
arguments.add(packagePath.getPath());\r
arguments.add(params.getApiKey());\r
if (params.getCreateOnly()) {\r
arguments.add("-CreateOnly");\r
}\r
\r
+ final String source = params.getPublishSource();\r
return executeNuGet(\r
params,\r
- Arrays.asList(params.getPublishSource()),\r
+ StringUtil.isEmptyOrSpaces(source)\r
+ ? Collections.<String>emptyList()\r
+ : Arrays.asList(source),\r
arguments,\r
packagePath.getParentFile(),\r
factory);\r
allowing(ps).getPublishSource(); will(returnValue("push-feed"));\r
allowing(ps).getCreateOnly(); will(returnValue(false));\r
\r
- oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList(myFile.getPath(), "api-key-guid", "-Source", "push-feed"), myFile.getParentFile());\r
+ oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList("push", myFile.getPath(), "api-key-guid", "-Source", "push-feed"), myFile.getParentFile());\r
+ }});\r
+\r
+ i.createPush(ctx, ps, myFile);\r
+ }\r
+\r
+ @Test\r
+ public void test_command_push_no_source() throws RunBuildException {\r
+ m.checking(new Expectations(){{\r
+ allowing(ps).getNuGetExeFile(); will(returnValue(myNuGet));\r
+ allowing(ps).getApiKey(); will(returnValue("api-key-guid"));\r
+ allowing(ps).getPublishSource(); will(returnValue(null));\r
+ allowing(ps).getCreateOnly(); will(returnValue(false));\r
+\r
+ oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList("push", myFile.getPath(), "api-key-guid"), myFile.getParentFile());\r
}});\r
\r
i.createPush(ctx, ps, myFile);\r
allowing(ps).getPublishSource(); will(returnValue("push-feed"));\r
allowing(ps).getCreateOnly(); will(returnValue(true));\r
\r
- oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList(myFile.getPath(), "api-key-guid", "-CreateOnly", "-Source", "push-feed"), myFile.getParentFile());\r
+ oneOf(myProcessFactory).executeCommandLine(ctx, myNuGet, Arrays.asList("push", myFile.getPath(), "api-key-guid", "-CreateOnly", "-Source", "push-feed"), myFile.getParentFile());\r
}});\r
\r
i.createPush(ctx, ps, myFile);\r
\r
package jetbrains.buildServer.nuget.tests.integration;\r
\r
-import com.intellij.execution.configurations.GeneralCommandLine;\r
-import jetbrains.buildServer.ExecResult;\r
import jetbrains.buildServer.RunBuildException;\r
-import jetbrains.buildServer.SimpleCommandLineProcessRunner;\r
-import jetbrains.buildServer.agent.*;\r
+import jetbrains.buildServer.agent.BuildFinishedStatus;\r
+import jetbrains.buildServer.agent.BuildProcess;\r
import jetbrains.buildServer.nuget.agent.commands.impl.CommandFactoryImpl;\r
import jetbrains.buildServer.nuget.agent.commands.impl.NuGetActionFactoryImpl;\r
import jetbrains.buildServer.nuget.agent.install.PackageUsages;\r
import jetbrains.buildServer.nuget.agent.install.impl.NuGetPackagesCollectorImpl;\r
import jetbrains.buildServer.nuget.agent.install.impl.NuGetPackagesConfigParser;\r
import jetbrains.buildServer.nuget.agent.install.impl.PackageUsagesImpl;\r
-import jetbrains.buildServer.nuget.agent.parameters.NuGetFetchParameters;\r
-import jetbrains.buildServer.nuget.agent.parameters.PackagesInstallParameters;\r
-import jetbrains.buildServer.nuget.agent.parameters.PackagesParametersFactory;\r
-import jetbrains.buildServer.nuget.agent.parameters.PackagesUpdateParameters;\r
-import jetbrains.buildServer.nuget.agent.util.BuildProcessBase;\r
-import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
import jetbrains.buildServer.nuget.common.PackageInfo;\r
import jetbrains.buildServer.nuget.common.PackagesUpdateMode;\r
-import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
import jetbrains.buildServer.util.ArchiveUtil;\r
-import org.jetbrains.annotations.NotNull;\r
import org.jetbrains.annotations.Nullable;\r
import org.jmock.Expectations;\r
-import org.jmock.Mockery;\r
import org.testng.Assert;\r
-import org.testng.annotations.BeforeMethod;\r
import org.testng.annotations.Test;\r
\r
import java.io.File;\r
* Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
* Date: 08.07.11 2:15\r
*/\r
-public class InstallPackageIntegtatoinTest extends BuildProcessTestCase {\r
- private File myRoot;\r
- private Mockery m;\r
- private AgentRunningBuild myBuild;\r
- private BuildRunnerContext myContext;\r
- private BuildProgressLogger myLogger;\r
- private PackagesParametersFactory myParametersFactory;\r
- private PackagesInstallParameters myInstall;\r
- private PackagesUpdateParameters myUpdate;\r
- private NuGetFetchParameters myNuGet;\r
- private BuildProcess myMockProcess;\r
-\r
- @BeforeMethod\r
- @Override\r
- protected void setUp() throws Exception {\r
- super.setUp();\r
- myRoot = createTempDir();\r
- m = new Mockery();\r
- myBuild = m.mock(AgentRunningBuild.class);\r
- myContext = m.mock(BuildRunnerContext.class);\r
- myLogger = m.mock(BuildProgressLogger.class);\r
- myParametersFactory = m.mock(PackagesParametersFactory.class);\r
- myInstall = m.mock(PackagesInstallParameters.class);\r
- myUpdate = m.mock(PackagesUpdateParameters.class);\r
- myMockProcess = m.mock(BuildProcess.class);\r
- myNuGet = m.mock(NuGetFetchParameters.class);\r
-\r
- m.checking(new Expectations() {{\r
- allowing(myContext).getBuild();\r
- will(returnValue(myBuild));\r
- allowing(myBuild).getBuildLogger();\r
- will(returnValue(myLogger));\r
- allowing(myBuild).getCheckoutDirectory();\r
- will(returnValue(myRoot));\r
-\r
- allowing(myMockProcess).start();\r
- allowing(myMockProcess).waitFor();\r
- will(returnValue(BuildFinishedStatus.FINISHED_SUCCESS));\r
-\r
- allowing(myLogger).message(with(any(String.class)));\r
- allowing(myLogger).activityStarted(with(equal("install")), with(any(String.class)), with(any(String.class)));\r
- allowing(myLogger).activityFinished(with(equal("install")), with(any(String.class)));\r
-\r
- allowing(myInstall).getNuGetParameters();\r
- will(returnValue(myNuGet));\r
- allowing(myUpdate).getNuGetParameters();\r
- will(returnValue(myNuGet));\r
- }});\r
- }\r
+public class InstallPackageIntegtatoinTest extends IntegrationTestBase {\r
\r
@Test\r
public void test_01_online_sources() throws RunBuildException {\r
Assert.assertEquals(4, packageses.size());\r
}\r
\r
- @NotNull\r
- private File getTestDataPath(final String path) {\r
- return Paths.getTestDataPath("integration/" + path);\r
- }\r
-\r
@Test\r
public void test_01_online_sources_update_forConfig() throws RunBuildException {\r
ArchiveUtil.unpackZip(getTestDataPath("test-01.zip"), "", myRoot);\r
m.assertIsSatisfied();\r
}\r
\r
- private CommandlineBuildProcessFactory executingFactory() {\r
- return new CommandlineBuildProcessFactory() {\r
- public BuildProcess executeCommandLine(@NotNull final BuildRunnerContext hostContext,\r
- @NotNull final File program,\r
- @NotNull final Collection<String> argz,\r
- @NotNull final File workingDir) throws RunBuildException {\r
- return new BuildProcessBase() {\r
- @NotNull\r
- @Override\r
- protected BuildFinishedStatus waitForImpl() throws RunBuildException {\r
- GeneralCommandLine cmd = new GeneralCommandLine();\r
- cmd.setExePath(program.getPath());\r
- for (String arg : argz) {\r
- cmd.addParameter(arg);\r
- }\r
- cmd.setWorkingDirectory(workingDir);\r
-\r
- System.out.println("Run: " + cmd.getCommandLineString());\r
-\r
- ExecResult result = SimpleCommandLineProcessRunner.runCommand(cmd, new byte[0]);\r
-\r
- System.out.println(result.getStdout());\r
- System.out.println(result.getStderr());\r
-\r
- return result.getExitCode() == 0\r
- ? BuildFinishedStatus.FINISHED_SUCCESS\r
- : BuildFinishedStatus.FINISHED_FAILED;\r
- }\r
- };\r
- }\r
- };\r
- }\r
}\r
--- /dev/null
+/*\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.integration;\r
+\r
+import com.intellij.execution.configurations.GeneralCommandLine;\r
+import jetbrains.buildServer.ExecResult;\r
+import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.SimpleCommandLineProcessRunner;\r
+import jetbrains.buildServer.agent.*;\r
+import jetbrains.buildServer.nuget.agent.parameters.*;\r
+import jetbrains.buildServer.nuget.agent.util.BuildProcessBase;\r
+import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
+import jetbrains.buildServer.nuget.tests.util.BuildProcessTestCase;\r
+import org.jetbrains.annotations.NotNull;\r
+import org.jmock.Expectations;\r
+import org.jmock.Mockery;\r
+import org.testng.annotations.BeforeMethod;\r
+\r
+import java.io.File;\r
+import java.util.Collection;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 22.07.11 1:26\r
+ */\r
+public class IntegrationTestBase extends BuildProcessTestCase {\r
+ protected File myRoot;\r
+ protected Mockery m;\r
+ protected AgentRunningBuild myBuild;\r
+ protected BuildRunnerContext myContext;\r
+ protected BuildProgressLogger myLogger;\r
+ protected PackagesParametersFactory myParametersFactory;\r
+ protected PackagesInstallParameters myInstall;\r
+ protected PackagesUpdateParameters myUpdate;\r
+ protected NuGetPublishParameters myPublishParameters;\r
+ protected NuGetFetchParameters myNuGet;\r
+ private BuildProcess myMockProcess;\r
+\r
+ @BeforeMethod\r
+ @Override\r
+ protected void setUp() throws Exception {\r
+ super.setUp();\r
+ myRoot = createTempDir();\r
+ m = new Mockery();\r
+ myBuild = m.mock(AgentRunningBuild.class);\r
+ myContext = m.mock(BuildRunnerContext.class);\r
+ myLogger = m.mock(BuildProgressLogger.class);\r
+ myParametersFactory = m.mock(PackagesParametersFactory.class);\r
+ myInstall = m.mock(PackagesInstallParameters.class);\r
+ myUpdate = m.mock(PackagesUpdateParameters.class);\r
+ myMockProcess = m.mock(BuildProcess.class);\r
+ myNuGet = m.mock(NuGetFetchParameters.class);\r
+ myPublishParameters = m.mock(NuGetPublishParameters.class);\r
+\r
+ m.checking(new Expectations() {{\r
+ allowing(myContext).getBuild();\r
+ will(returnValue(myBuild));\r
+ allowing(myBuild).getBuildLogger();\r
+ will(returnValue(myLogger));\r
+ allowing(myBuild).getCheckoutDirectory();\r
+ will(returnValue(myRoot));\r
+\r
+ allowing(myMockProcess).start();\r
+ allowing(myMockProcess).waitFor();\r
+ will(returnValue(BuildFinishedStatus.FINISHED_SUCCESS));\r
+\r
+ allowing(myLogger).message(with(any(String.class)));\r
+ allowing(myLogger).activityStarted(with(equal("install")), with(any(String.class)), with(any(String.class)));\r
+ allowing(myLogger).activityFinished(with(equal("install")), with(any(String.class)));\r
+\r
+ allowing(myInstall).getNuGetParameters();\r
+ will(returnValue(myNuGet));\r
+ allowing(myUpdate).getNuGetParameters();\r
+ will(returnValue(myNuGet));\r
+ }});\r
+ }\r
+\r
+ @NotNull\r
+ protected File getTestDataPath(final String path) {\r
+ return Paths.getTestDataPath("integration/" + path);\r
+ }\r
+\r
+ protected CommandlineBuildProcessFactory executingFactory() {\r
+ return new CommandlineBuildProcessFactory() {\r
+ public BuildProcess executeCommandLine(@NotNull final BuildRunnerContext hostContext,\r
+ @NotNull final File program,\r
+ @NotNull final Collection<String> argz,\r
+ @NotNull final File workingDir) throws RunBuildException {\r
+ return new BuildProcessBase() {\r
+ @NotNull\r
+ @Override\r
+ protected BuildFinishedStatus waitForImpl() throws RunBuildException {\r
+ GeneralCommandLine cmd = new GeneralCommandLine();\r
+ cmd.setExePath(program.getPath());\r
+ for (String arg : argz) {\r
+ cmd.addParameter(arg);\r
+ }\r
+ cmd.setWorkingDirectory(workingDir);\r
+\r
+ System.out.println("Run: " + cmd.getCommandLineString());\r
+\r
+ ExecResult result = SimpleCommandLineProcessRunner.runCommand(cmd, new byte[0]);\r
+\r
+ System.out.println(result.getStdout());\r
+ System.out.println(result.getStderr());\r
+\r
+ return result.getExitCode() == 0\r
+ ? BuildFinishedStatus.FINISHED_SUCCESS\r
+ : BuildFinishedStatus.FINISHED_FAILED;\r
+ }\r
+ };\r
+ }\r
+ };\r
+ }\r
+}\r
--- /dev/null
+/*\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.integration;\r
+\r
+import com.intellij.execution.configurations.GeneralCommandLine;\r
+import jetbrains.buildServer.ExecResult;\r
+import jetbrains.buildServer.RunBuildException;\r
+import jetbrains.buildServer.SimpleCommandLineProcessRunner;\r
+import jetbrains.buildServer.agent.BuildFinishedStatus;\r
+import jetbrains.buildServer.agent.BuildProcess;\r
+import jetbrains.buildServer.nuget.agent.commands.impl.CommandFactoryImpl;\r
+import jetbrains.buildServer.nuget.agent.commands.impl.NuGetActionFactoryImpl;\r
+import jetbrains.buildServer.nuget.agent.install.PackageUsages;\r
+import jetbrains.buildServer.nuget.agent.install.impl.NuGetPackagesCollectorImpl;\r
+import jetbrains.buildServer.nuget.agent.install.impl.NuGetPackagesConfigParser;\r
+import jetbrains.buildServer.nuget.agent.install.impl.PackageUsagesImpl;\r
+import jetbrains.buildServer.nuget.agent.publish.PackagesPublishRunner;\r
+import jetbrains.buildServer.util.FileUtil;\r
+import org.jetbrains.annotations.NotNull;\r
+import org.jmock.Expectations;\r
+import org.testng.Assert;\r
+import org.testng.annotations.Test;\r
+\r
+import java.io.File;\r
+import java.io.IOException;\r
+import java.util.Arrays;\r
+\r
+/**\r
+ * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
+ * Date: 22.07.11 1:25\r
+ */\r
+public class PackagesPublishIntegrationTest extends IntegrationTestBase {\r
+\r
+ @Test\r
+ public void test_publish_packages() throws IOException, RunBuildException {\r
+ final File pkg = preparePackage();\r
+ callPublishRunner(pkg);\r
+ }\r
+\r
+ @Test\r
+ public void test_create_mock_package() throws IOException {\r
+ final File file = preparePackage();\r
+ System.out.println(file);\r
+ }\r
+\r
+\r
+ private File preparePackage() throws IOException {\r
+ @NotNull final File root = createTempDir();\r
+ final File spec = new File(root, "SamplePackage.nuspec");\r
+ FileUtil.copy(getTestDataPath("SamplePackage.nuspec"), spec);\r
+\r
+ GeneralCommandLine cmd = new GeneralCommandLine();\r
+ cmd.setExePath(Paths.getPathToNuGet().getPath());\r
+ cmd.setWorkingDirectory(root);\r
+ cmd.addParameter("pack");\r
+ cmd.addParameter(spec.getPath());\r
+ cmd.addParameter("-Version");\r
+ long time = System.currentTimeMillis();\r
+ final long max = 65536;\r
+ String build = "";\r
+ for(int i = 0; i <4; i++) {\r
+ build = (Math.max(1, time % max)) + (build.length() == 0 ? "" : "." + build);\r
+ time /= max;\r
+ }\r
+ cmd.addParameter(build);\r
+ cmd.addParameter("-Verbose");\r
+\r
+ final ExecResult result = SimpleCommandLineProcessRunner.runCommand(cmd, new byte[0]);\r
+ System.out.println(result.getStdout());\r
+ System.out.println(result.getStderr());\r
+\r
+ Assert.assertEquals(0, result.getExitCode());\r
+\r
+ File pkg = new File(root, "SamplePackage." + build + ".nupkg");\r
+ Assert.assertTrue(pkg.isFile());\r
+ return pkg;\r
+ }\r
+\r
+ private void callPublishRunner(@NotNull final File pkg) throws RunBuildException {\r
+\r
+ m.checking(new Expectations(){{\r
+ allowing(myPublishParameters).getFiles(); will(returnValue(Arrays.asList(pkg.getPath())));\r
+ allowing(myPublishParameters).getCreateOnly(); will(returnValue(true));\r
+ allowing(myPublishParameters).getNuGetExeFile(); will(returnValue(Paths.getPathToNuGet()));\r
+ allowing(myPublishParameters).getPublishSource(); will(returnValue(null));\r
+ allowing(myPublishParameters).getApiKey(); will(returnValue("88001628-cb42-4c35-91be-4015cf638bcf"));\r
+\r
+ allowing(myParametersFactory).loadPublishParameters(myContext);will(returnValue(myPublishParameters));\r
+ }});\r
+\r
+ NuGetPackagesCollectorImpl collector = new NuGetPackagesCollectorImpl();\r
+ PackageUsages pu = new PackageUsagesImpl(\r
+ collector,\r
+ new NuGetPackagesConfigParser()\r
+ );\r
+\r
+ final PackagesPublishRunner runner = new PackagesPublishRunner(\r
+ new NuGetActionFactoryImpl(executingFactory(), pu, new CommandFactoryImpl()), myParametersFactory);\r
+\r
+ final BuildProcess proc = runner.createBuildProcess(myBuild, myContext);\r
+ assertRunSuccessfully(proc, BuildFinishedStatus.FINISHED_SUCCESS);\r
+ }\r
+}\r
<classes>\r
<class name="jetbrains.buildServer.nuget.tests.integration.InstallPackageIntegtatoinTest"/>\r
<class name="jetbrains.buildServer.nuget.tests.integration.NuGetExecutorTest"/>\r
+ <class name="jetbrains.buildServer.nuget.tests.integration.PackagesPublishIntegrationTest"/>\r
</classes>\r
</test>\r
</suite>\r
--- /dev/null
+<?xml version="1.0"?>\r
+<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">\r
+ <metadata>\r
+ <id>SamplePackage</id>\r
+ <version>1.0</version>\r
+ <authors>jonnyzzz-4-test</authors>\r
+ <owners>jonnyzzz-4-test</owners>\r
+ <licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>\r
+ <projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>\r
+ <iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>\r
+ <requireLicenseAcceptance>false</requireLicenseAcceptance>\r
+ <description>Package description</description>\r
+ <tags>Tag1 Tag2</tags>\r
+ <dependencies>\r
+ <dependency id="Elmah" version="1.2" />\r
+ </dependencies>\r
+ </metadata>\r
+</package>
\ No newline at end of file