annotate mercurial-tests/src/jetbrains/buildServer/buildTriggers/vcs/mercurial/AgentMirrorCleanerTest.java @ 443:d0f80762461a

Test refactoring: get rid of LocalRepositoryUtil
author Dmitry Neverov <dmitry.neverov@gmail.com>
date Tue, 19 Jun 2012 15:17:11 +0400
parents 04eab204ba39
children efba721f9a1d
rev   line source
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
1 package jetbrains.buildServer.buildTriggers.vcs.mercurial;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
2
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
3 import com.intellij.openapi.diagnostic.Logger;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
4 import jetbrains.buildServer.TempFiles;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
5 import jetbrains.buildServer.agent.*;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
6 import jetbrains.buildServer.log.Log4jFactory;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
7 import jetbrains.buildServer.vcs.*;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
8 import org.jetbrains.annotations.NotNull;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
9 import org.jmock.Expectations;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
10 import org.jmock.Mockery;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
11 import org.testng.annotations.AfterMethod;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
12 import org.testng.annotations.BeforeMethod;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
13 import org.testng.annotations.Test;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
14
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
15 import java.io.File;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
16 import java.util.Date;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
17 import java.util.HashMap;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
18
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
19 import static java.util.Arrays.asList;
443
d0f80762461a Test refactoring: get rid of LocalRepositoryUtil
Dmitry Neverov <dmitry.neverov@gmail.com>
parents: 429
diff changeset
20 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.Util.copyRepository;
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
21 import static jetbrains.buildServer.buildTriggers.vcs.mercurial.VcsRootBuilder.vcsRoot;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
22
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
23 /**
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
24 * @author dmitry.neverov
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
25 */
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
26 @Test
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
27 public class AgentMirrorCleanerTest {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
28
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
29 static {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
30 Logger.setFactory(new Log4jFactory());
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
31 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
32
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
33 private TempFiles myTempFiles = new TempFiles();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
34 private Mockery myContext;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
35 private MercurialAgentSideVcsSupport myVcsSupport;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
36 private AgentMirrorCleaner myCleaner;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
37 private BuildProgressLogger myLogger;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
38 private File myWorkDir;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
39 private int myBuildCounter;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
40 private MirrorManager myMirrorManager;
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
41
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
42 @BeforeMethod
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
43 public void setUp() throws Exception {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
44 myContext = new Mockery();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
45 myWorkDir = myTempFiles.createTempDir();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
46
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
47 final BuildAgentConfiguration agentConfig = myContext.mock(BuildAgentConfiguration.class);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
48 myContext.checking(new Expectations() {{
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
49 allowing(agentConfig).getCacheDirectory("mercurial"); will(returnValue(myTempFiles.createTempDir()));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
50 allowing(agentConfig).getParametersResolver(); will(returnValue(new HgPathResolver()));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
51 }});
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
52
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
53 AgentPluginConfigImpl pluginConfig = new AgentPluginConfigImpl(agentConfig);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
54 AgentHgPathProvider hgPathProvider = new AgentHgPathProvider(agentConfig);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
55 myMirrorManager = new MirrorManagerImpl(pluginConfig);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
56 myVcsSupport = new MercurialAgentSideVcsSupport(pluginConfig, hgPathProvider, myMirrorManager);
429
04eab204ba39 Remove HgVcsRoot's dependency on HgPathProvider
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents: 424
diff changeset
57 myCleaner = new AgentMirrorCleaner(myMirrorManager);
424
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
58 myLogger = myContext.mock(BuildProgressLogger.class);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
59 myContext.checking(new Expectations() {{
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
60 allowing(myLogger).message(with(any(String.class)));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
61 allowing(myLogger).warning(with(any(String.class)));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
62 }});
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
63 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
64
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
65 @AfterMethod
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
66 public void tearDown() {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
67 myTempFiles.cleanup();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
68 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
69
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
70
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
71 public void should_add_cleaners_only_for_roots_not_used_in_build() throws Exception {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
72 //setup mirrors for 2 roots on an agent:
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
73 final File repo1 = myTempFiles.createTempDir();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
74 final File repo2 = myTempFiles.createTempDir();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
75 copyRepository(new File("mercurial-tests/testData/rep1"), repo1);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
76 copyRepository(new File("mercurial-tests/testData/rep2"), repo2);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
77
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
78 final VcsRoot root1 = vcsRoot().withUrl(repo1.getAbsolutePath()).build();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
79 final VcsRoot root2 = vcsRoot().withUrl(repo2.getAbsolutePath()).build();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
80 //update will initialize mirrors
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
81 doUpdate(root1, "4:b06a290a363b", myWorkDir);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
82 doUpdate(root2, "8:b6e2d176fe8e", new File(myWorkDir, "subdir"));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
83
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
84 final File mirrorDir1 = myMirrorManager.getMirrorDir(repo1.getAbsolutePath());
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
85 final File mirrorDir2 = myMirrorManager.getMirrorDir(repo2.getAbsolutePath());
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
86 final Date mirrorDir1LastUsedTime = new Date(myMirrorManager.getLastUsedTime(mirrorDir1));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
87 final Date mirrorDir2LastUsedTime = new Date(myMirrorManager.getLastUsedTime(mirrorDir2));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
88
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
89 //run build which uses root1:
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
90 final DirectoryCleanersProviderContext ctx = myContext.mock(DirectoryCleanersProviderContext.class);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
91 myContext.checking(new Expectations(){{
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
92 AgentRunningBuild build = myContext.mock(AgentRunningBuild.class, "build" + myBuildCounter++);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
93 allowing(build).getVcsRootEntries(); will(returnValue(asList(new VcsRootEntry(root1, CheckoutRules.DEFAULT))));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
94 allowing(ctx).getRunningBuild(); will(returnValue(build));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
95 }});
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
96
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
97 //cleaner should add cleaners only for roots which are not used in the running build
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
98 final DirectoryCleanersRegistry registry = myContext.mock(DirectoryCleanersRegistry.class);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
99 myContext.checking(new Expectations() {{
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
100 never(registry).addCleaner(with(mirrorDir1), with(mirrorDir1LastUsedTime));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
101 one(registry).addCleaner(with(mirrorDir2), with(mirrorDir2LastUsedTime));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
102 }});
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
103
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
104 myCleaner.registerDirectoryCleaners(ctx, registry);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
105 myContext.assertIsSatisfied();
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
106 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
107
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
108
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
109 private void doUpdate(@NotNull VcsRoot vcsRoot, @NotNull String toVersion, @NotNull File workDir) throws VcsException {
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
110 final AgentRunningBuild build = myContext.mock(AgentRunningBuild.class, "build" + myBuildCounter++);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
111 myContext.checking(new Expectations() {{
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
112 allowing(build).getBuildLogger(); will(returnValue(myLogger));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
113 allowing(build).getSharedConfigParameters(); will(returnValue(new HashMap<String, String>() {{
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
114 put("teamcity.hg.use.local.mirrors", "true");
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
115 }}));
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
116 }});
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
117 myVcsSupport.getUpdater(vcsRoot, CheckoutRules.DEFAULT, toVersion, workDir, build, false).process(IncludeRule.createDefaultInstance(), workDir);
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
118 }
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
119
3239780e4e8f Implement cleaners for mirrors on the agents
Dmitry Neverov <dmitry.neverov@jetbrains.com>
parents:
diff changeset
120 }