1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.scm.provider.local.command.update;
20
21 import java.io.File;
22 import java.io.FileReader;
23 import java.io.Reader;
24 import java.util.Date;
25 import java.util.Iterator;
26 import java.util.List;
27 import java.util.TreeSet;
28
29 import org.apache.maven.scm.ScmFile;
30 import org.apache.maven.scm.ScmFileSet;
31 import org.apache.maven.scm.ScmTestCase;
32 import org.apache.maven.scm.command.update.UpdateScmResult;
33 import org.apache.maven.scm.manager.ScmManager;
34 import org.apache.maven.scm.provider.local.metadata.LocalScmMetadata;
35 import org.apache.maven.scm.provider.local.metadata.io.xpp3.LocalScmMetadataXpp3Reader;
36 import org.apache.maven.scm.repository.ScmRepository;
37 import org.apache.maven.scm.tck.command.update.UpdateCommandTckTest;
38 import org.codehaus.plexus.util.FileUtils;
39 import org.codehaus.plexus.util.IOUtil;
40 import org.junit.Test;
41
42 import static org.junit.Assert.assertEquals;
43 import static org.junit.Assert.assertFalse;
44 import static org.junit.Assert.assertNotNull;
45 import static org.junit.Assert.assertTrue;
46
47
48
49
50
51 public class LocalUpdateCommandTckTest extends UpdateCommandTckTest {
52 private static final String moduleName = "update-tck";
53
54 public String getScmUrl() throws Exception {
55 return "scm:local|" + getRepositoryRoot() + "|" + moduleName;
56 }
57
58 public void initRepo() throws Exception {
59 makeRepo(getRepositoryRoot());
60 }
61
62
63
64
65
66 @Test
67 public void testDeletion() throws Exception {
68 FileUtils.deleteDirectory(getUpdatingCopy());
69
70 ScmRepository repository = makeScmRepository(getScmUrl());
71
72 checkOut(getUpdatingCopy(), repository);
73
74
75 File readmeFileLocal = new File(getUpdatingCopy(), "readme.txt");
76 assertTrue(readmeFileLocal.exists());
77 File newFileLocal = new File(getUpdatingCopy(), "newfile.xml");
78 assertFalse(newFileLocal.exists());
79
80
81 File readmeFileRepo = new File(getRepositoryRoot(), moduleName + "/readme.txt");
82 assertTrue(readmeFileRepo.exists());
83 assertTrue("Could not delete", readmeFileRepo.delete());
84 assertFalse(readmeFileRepo.exists());
85
86
87 ScmTestCase.makeFile(getUpdatingCopy(), "newfile.xml", "added newfile.xml locally");
88 assertTrue(newFileLocal.exists());
89
90
91
92
93
94 ScmManager scmManager = getScmManager();
95 Date lastUpdate = new Date(System.currentTimeMillis());
96 Thread.sleep(1000);
97 UpdateScmResult result = scmManager.update(repository, new ScmFileSet(getUpdatingCopy()), lastUpdate);
98
99 assertNotNull("The command returned a null result.", result);
100
101 assertResultIsSuccess(result);
102
103 List<ScmFile> updatedFiles = result.getUpdatedFiles();
104
105 assertEquals("Expected 1 files in the updated files list " + updatedFiles, 1, updatedFiles.size());
106
107
108
109
110
111 Iterator<ScmFile> files = new TreeSet<ScmFile>(updatedFiles).iterator();
112
113
114 ScmFile file = (ScmFile) files.next();
115 assertPath("/readme.txt", file.getPath());
116 assertTrue(file.getStatus().isUpdate());
117
118
119
120
121
122
123 assertFalse("Expected local copy of readme.txt to be deleted", readmeFileLocal.exists());
124
125
126 assertTrue("Expected local copy of newfile.xml NOT to be deleted", newFileLocal.exists());
127
128
129
130
131 File metadataFile = new File(getUpdatingCopy(), ".maven-scm-local");
132 assertTrue("Expected metadata file .maven-scm-local does not exist", metadataFile.exists());
133 Reader reader = new FileReader(metadataFile);
134 LocalScmMetadata metadata;
135 try {
136 metadata = new LocalScmMetadataXpp3Reader().read(reader);
137 } finally {
138 IOUtil.close(reader);
139 }
140 File root = new File(getRepositoryRoot() + "/" + moduleName);
141 @SuppressWarnings("unchecked")
142 List<String> fileNames = FileUtils.getFileNames(root, "**", null, false);
143 assertEquals(fileNames, metadata.getRepositoryFileNames());
144 }
145
146 private void makeRepo(File workingDirectory) throws Exception {
147 makeFile(workingDirectory, moduleName + "/pom.xml", "/pom.xml");
148
149 makeFile(workingDirectory, moduleName + "/readme.txt", "/readme.txt");
150
151 makeFile(workingDirectory, moduleName + "/src/main/java/Application.java", "/src/main/java/Application.java");
152
153 makeFile(workingDirectory, moduleName + "/src/test/java/Test.java", "/src/test/java/Test.java");
154
155 makeDirectory(workingDirectory, moduleName + "/src/test/resources");
156 }
157 }