add packages watcher test
[teamcity/dotNetPackagesSupport.git] / nuget-tests / src / jetbrains / buildServer / nuget / tests / agent / PackagesWatcherTest.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.agent.AgentLifeCycleListener;\r
21 import jetbrains.buildServer.agent.AgentRunningBuild;\r
22 import jetbrains.buildServer.agent.BuildFinishedStatus;\r
23 import jetbrains.buildServer.agent.BuildRunnerContext;\r
24 import jetbrains.buildServer.agent.artifacts.ArtifactsWatcher;\r
25 import jetbrains.buildServer.nuget.agent.install.NuGetPackagesCollector;\r
26 import jetbrains.buildServer.nuget.agent.install.impl.NuGetPackagesCollectorImpl;\r
27 import jetbrains.buildServer.nuget.agent.install.impl.PackagesInfoUploader;\r
28 import jetbrains.buildServer.nuget.agent.install.impl.PackagesWatcher;\r
29 import jetbrains.buildServer.nuget.common.PackageDependenciesStore;\r
30 import jetbrains.buildServer.util.EventDispatcher;\r
31 import org.hamcrest.BaseMatcher;\r
32 import org.hamcrest.Description;\r
33 import org.jmock.Expectations;\r
34 import org.jmock.Mockery;\r
35 import org.testng.Assert;\r
36 import org.testng.annotations.BeforeMethod;\r
37 import org.testng.annotations.Test;\r
38 \r
39 import java.io.File;\r
40 import java.io.IOException;\r
41 \r
42 /**\r
43  * Created by Eugene Petrenko (eugene.petrenko@gmail.com)\r
44  * Date: 19.07.11 14:10\r
45  */\r
46 public class PackagesWatcherTest extends BaseTestCase {\r
47   private Mockery m;\r
48   private ArtifactsWatcher watcher;\r
49   private NuGetPackagesCollector collector;\r
50   private AgentLifeCycleListener multicaster;\r
51   private AgentRunningBuild build;\r
52 \r
53   @BeforeMethod\r
54   @Override\r
55   protected void setUp() throws Exception {\r
56     super.setUp();\r
57     m = new Mockery();\r
58     watcher = m.mock(ArtifactsWatcher.class);\r
59     build = m.mock(AgentRunningBuild.class);\r
60 \r
61     final EventDispatcher<AgentLifeCycleListener> events = EventDispatcher.create(AgentLifeCycleListener.class);\r
62     multicaster = events.getMulticaster();\r
63 \r
64     final NuGetPackagesCollectorImpl nuGetPackagesCollector = new NuGetPackagesCollectorImpl();\r
65     collector = nuGetPackagesCollector;\r
66 \r
67     new PackagesWatcher(\r
68             events,\r
69             nuGetPackagesCollector,\r
70             new PackagesInfoUploader(watcher, new PackageDependenciesStore())\r
71     );\r
72   }\r
73 \r
74   @Test\r
75   public void test_upload_packages_in_before_build_finish_no_packages() {\r
76     multicaster.beforeBuildFinish(build, BuildFinishedStatus.FINISHED_FAILED);\r
77 \r
78     m.assertIsSatisfied();\r
79   }\r
80 \r
81   @Test\r
82   public void test_upload_packages_in_before_build_finish_with_packages() throws IOException {\r
83     final File tempDir = createTempDir();\r
84     m.checking(new Expectations(){{\r
85       allowing(build).getBuildTempDirectory();  will(returnValue(tempDir));\r
86       oneOf(watcher).addNewArtifactsPath(with(new NuGetUploadPathMatcher(tempDir)));\r
87     }});\r
88 \r
89     collector.addPackage("aaa", "1.2.4", null);\r
90     multicaster.beforeBuildFinish(build, BuildFinishedStatus.FINISHED_FAILED);\r
91 \r
92     m.assertIsSatisfied();\r
93   }\r
94 \r
95   @Test\r
96   public void test_clean_packages_on_build_start() {\r
97     collector.addPackage("aaa", "bbb", null);\r
98     multicaster.buildStarted(build);\r
99 \r
100     Assert.assertTrue(collector.getPackages().isEmpty());\r
101 \r
102     m.assertIsSatisfied();\r
103   }\r
104 \r
105   private static class NuGetUploadPathMatcher extends BaseMatcher<String> {\r
106     private final File myTempDir;\r
107 \r
108     public NuGetUploadPathMatcher(File tempDir) {\r
109       myTempDir = tempDir;\r
110     }\r
111 \r
112     public boolean matches(Object o) {\r
113       String path = ((String) o).trim();\r
114       if (!path.startsWith(myTempDir.getPath())) return false;\r
115       return (path.endsWith("/nuget.xml => .teamcity/nuget")\r
116               || path.endsWith("\\nuget.xml => .teamcity/nuget"));\r
117     }\r
118 \r
119     public void describeTo(Description description) {\r
120     }\r
121   }\r
122 }\r