re-implement hide of nuget api key in build logs, add more tests for it
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / agent / NuGetPushActoinFactoryTest.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.BuildParametersMap;\r
22 import jetbrains.buildServer.agent.BuildRunnerContext;\r
23 import jetbrains.buildServer.nuget.agent.commands.impl.CommandFactoryImpl;\r
24 import jetbrains.buildServer.nuget.agent.commands.impl.NuGetActionFactoryImpl;\r
25 import jetbrains.buildServer.nuget.agent.dependencies.PackageUsages;\r
26 import jetbrains.buildServer.nuget.agent.parameters.NuGetPublishParameters;\r
27 import jetbrains.buildServer.nuget.agent.util.CommandlineBuildProcessFactory;\r
28 import org.hamcrest.BaseMatcher;\r
29 import org.hamcrest.Description;\r
30 import org.jetbrains.annotations.NotNull;\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 import java.util.Collections;\r
38 import java.util.List;\r
39 import java.util.Map;\r
40 \r
41 /**\r
42  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
43  * Date: 21.07.11 16:46\r
44  */\r
45 public class NuGetPushActoinFactoryTest extends BaseTestCase {\r
46   private Mockery m;\r
47   private CommandlineBuildProcessFactory myProcessFactory;\r
48   private NuGetActionFactoryImpl i;\r
49   private BuildRunnerContext ctx;\r
50   private NuGetPublishParameters ps;\r
51   private File myFile;\r
52   private File myNuGet;\r
53   private String cmd;\r
54   private BuildParametersMap myBuildParametersMap;\r
55 \r
56 \r
57   @BeforeMethod\r
58   @Override\r
59   protected void setUp() throws Exception {\r
60     super.setUp();\r
61     m = new Mockery();\r
62     myProcessFactory = m.mock(CommandlineBuildProcessFactory.class);\r
63     PackageUsages pu = m.mock(PackageUsages.class);\r
64     i = new NuGetActionFactoryImpl(myProcessFactory, pu, new CommandFactoryImpl());\r
65     ctx = m.mock(BuildRunnerContext.class);\r
66     ps = m.mock(NuGetPublishParameters.class);\r
67 \r
68     myBuildParametersMap = m.mock(BuildParametersMap.class);\r
69     cmd = System.getenv("ComSpec");\r
70 \r
71     m.checking(new Expectations(){{\r
72       allowing(ctx).getBuildParameters(); will(returnValue(myBuildParametersMap));\r
73       allowing(myBuildParametersMap).getEnvironmentVariables(); will(returnValue(Collections.singletonMap("ComSpec", cmd)));\r
74     }});\r
75 \r
76     myFile = createTempFile();\r
77     myNuGet = createTempFile();\r
78   }\r
79 \r
80   private org.hamcrest.Matcher<List<String>> arguments(final String... args) {\r
81     return new BaseMatcher<List<String>>() {\r
82       public boolean matches(Object o) {\r
83         List<String> text = (List<String>) o;\r
84 \r
85         if (text.size() != args.length) {\r
86           return false;\r
87         }\r
88 \r
89         for (int i = 0; i < args.length; i++) {\r
90           if (args[i].startsWith("%%teamcity_nuget_api_key_")) {\r
91             final String actual = text.get(i).replaceAll("%%teamcity_nuget_api_key_\\d+%%", "%%teamcity_nuget_api_key_DDD%%");\r
92             if (!actual.equals(args[i])) return false;\r
93           }\r
94         }\r
95         return true;\r
96       }\r
97 \r
98       public void describeTo(Description description) {\r
99         description.appendText("Should match: [");\r
100         for (String arg : args) {\r
101           description.appendValue(arg);\r
102           description.appendText(", ");\r
103         }\r
104         description.appendText("]");\r
105       }\r
106     };\r
107   }\r
108 \r
109   private org.hamcrest.Matcher<Map<String, String>> envApi(@NotNull final String key) {\r
110     return new BaseMatcher<Map<String, String>>() {\r
111       public boolean matches(Object o) {\r
112         Map<String, String> map = (Map<String, String>) o;\r
113         for (Map.Entry<String, String> e : map.entrySet()) {\r
114           if (e.getKey().startsWith("teamcity_nuget_api_key_")) {\r
115             return key.equals(e.getValue());\r
116           }\r
117         }\r
118         return false;\r
119       }\r
120 \r
121       public void describeTo(Description description) {\r
122         description.appendText("Environment map should contain value: ").appendValue(key);\r
123       }\r
124     };\r
125   }\r
126 \r
127   @Test\r
128   public void test_command_push() throws RunBuildException {\r
129     m.checking(new Expectations(){{\r
130       allowing(ps).getNuGetExeFile(); will(returnValue(myNuGet));\r
131       allowing(ps).getApiKey(); will(returnValue("api-key-guid"));\r
132       allowing(ps).getPublishSource(); will(returnValue("push-feed"));\r
133       allowing(ps).getCreateOnly(); will(returnValue(false));\r
134 \r
135       oneOf(myProcessFactory).executeCommandLine(with(equal(ctx)), with(equal(cmd)),\r
136               with(arguments("/c", myNuGet.getPath(), "push", myFile.getPath(), "%%teamcity_nuget_api_key_DDD%%", "-Source", "push-feed")),\r
137               with(equal(myFile.getParentFile())),\r
138               with(envApi("api-key-guid"))\r
139       );\r
140     }});\r
141 \r
142     i.createPush(ctx, ps, myFile);\r
143 \r
144     m.assertIsSatisfied();\r
145   }\r
146 \r
147   @Test\r
148   public void test_command_push_no_source() throws RunBuildException {\r
149     m.checking(new Expectations(){{\r
150       allowing(ps).getNuGetExeFile(); will(returnValue(myNuGet));\r
151       allowing(ps).getApiKey(); will(returnValue("api-key-guid"));\r
152       allowing(ps).getPublishSource(); will(returnValue(null));\r
153       allowing(ps).getCreateOnly(); will(returnValue(false));\r
154 \r
155       oneOf(myProcessFactory).executeCommandLine(with(equal(ctx)), with(equal(cmd)),\r
156               with(arguments("/c", myNuGet.getPath(), "push", myFile.getPath(), "%%teamcity_nuget_api_key_DDD%%")),\r
157               with(equal(myFile.getParentFile())),\r
158               with(envApi("api-key-guid"))\r
159       );\r
160     }});\r
161 \r
162     i.createPush(ctx, ps, myFile);\r
163 \r
164     m.assertIsSatisfied();\r
165   }\r
166 \r
167   @Test\r
168   public void test_command_push_no_pacakge() throws RunBuildException {\r
169     m.checking(new Expectations(){{\r
170       allowing(ps).getNuGetExeFile(); will(returnValue(myNuGet));\r
171       allowing(ps).getApiKey(); will(returnValue("api-key-guid"));\r
172       allowing(ps).getPublishSource(); will(returnValue("push-feed"));\r
173       allowing(ps).getCreateOnly(); will(returnValue(true));\r
174 \r
175       oneOf(myProcessFactory).executeCommandLine(with(equal(ctx)), with(equal(cmd)),\r
176               with(arguments("/c", myNuGet.getPath(), "push", myFile.getPath(), "%%teamcity_nuget_api_key_DDD%%", "-CreateOnly", "-Source", "push-feed")),\r
177               with(equal(myFile.getParentFile())),\r
178               with(envApi("api-key-guid"))\r
179       );\r
180     }});\r
181 \r
182     i.createPush(ctx, ps, myFile);\r
183 \r
184     m.assertIsSatisfied();\r
185   }\r
186 \r
187 }\r