26
26
import java .io .IOException ;
27
27
import java .util .ArrayList ;
28
28
import java .util .List ;
29
+ import java .util .Set ;
29
30
import java .util .TreeSet ;
30
31
import java .util .concurrent .ConcurrentHashMap ;
32
+ import java .util .stream .Collectors ;
31
33
import org .junit .After ;
32
34
import org .junit .Assert ;
33
35
import static org .junit .Assert .assertTrue ;
34
36
import org .junit .Assume ;
35
37
import org .junit .Before ;
36
38
import org .junit .Test ;
39
+ import org .opensolaris .opengrok .configuration .Group ;
37
40
import org .opensolaris .opengrok .configuration .Project ;
38
41
import org .opensolaris .opengrok .configuration .RuntimeEnvironment ;
39
42
import org .opensolaris .opengrok .history .GitRepository ;
@@ -131,12 +134,24 @@ public void testValidate() {
131
134
132
135
@ Test
133
136
public void testAdd () throws Exception {
134
- // Add one project.
137
+ Assert .assertTrue (env .getRepositories ().isEmpty ());
138
+ Assert .assertTrue (env .getProjects ().isEmpty ());
139
+
140
+ // Add a group matching the project to be added.
141
+ String groupName = "mercurialgroup" ;
142
+ Group group = new Group (groupName , "mercurial.*" );
143
+ env .getGroups ().add (group );
144
+ Assert .assertTrue (env .hasGroups ());
145
+ Assert .assertEquals (1 , env .getGroups ().stream ().
146
+ filter (g -> g .getName ().equals (groupName )).
147
+ collect (Collectors .toSet ()).size ());
148
+ Assert .assertEquals (0 , group .getRepositories ().size ());
149
+ Assert .assertEquals (0 , group .getProjects ().size ());
150
+
151
+ // Prepare project addition.
135
152
Message m = new ProjectMessage ();
136
153
m .setText ("add" );
137
154
m .addTag ("mercurial" );
138
- Assert .assertTrue (env .getRepositories ().isEmpty ());
139
- Assert .assertTrue (env .getProjects ().isEmpty ());
140
155
141
156
// Add a sub-repository.
142
157
File mercurialRoot = new File (repository .getSourceRoot () + File .separator + "mercurial" );
@@ -146,16 +161,24 @@ public void testAdd() throws Exception {
146
161
"clone" , mercurialRoot .getAbsolutePath (),
147
162
mercurialRoot .getAbsolutePath () + File .separator + "usr" + File .separator + "closed" );
148
163
164
+ // Add the project.
149
165
env .setScanningDepth (3 );
150
166
m .apply (env );
167
+
168
+ // Check that the project was added properly.
151
169
Assert .assertTrue (env .getProjects ().containsKey ("mercurial" ));
152
170
Assert .assertEquals (1 , env .getProjects ().size ());
153
171
Assert .assertEquals (2 , env .getRepositories ().size ());
172
+ Assert .assertEquals (1 , group .getRepositories ().size ());
173
+ Assert .assertEquals (0 , group .getProjects ().size ());
174
+ Assert .assertEquals (1 , group .getRepositories ().stream ().
175
+ filter (p -> p .getName ().equals ("mercurial" )).
176
+ collect (Collectors .toSet ()).size ());
154
177
155
178
// Add more projects and check that they have been added incrementally.
156
179
// At the same time, it checks that multiple projects can be added
157
180
// with single message.
158
- m .setTags (new TreeSet <String >());
181
+ m .setTags (new TreeSet <>());
159
182
m .addTag ("git" );
160
183
m .addTag ("svn" );
161
184
m .apply (env );
@@ -195,13 +218,31 @@ public void testRepositoryRefresh() throws Exception {
195
218
Assert .assertEquals (1 , env .getProjectRepositoriesMap ().get (Project .getProject (mercurialRoot )).size ());
196
219
}
197
220
221
+ /**
222
+ * This test needs to perform indexing so that it can be verified that
223
+ * the delete message handling performs removal of the index data.
224
+ * @throws Exception
225
+ */
198
226
@ Test
199
227
public void testDelete () throws Exception {
228
+ String projectsToDelete [] = { "git" , "svn" };
229
+
200
230
env .setCtags (System .getProperty (ctagsProperty , "ctags" ));
201
231
202
232
assertTrue ("No point in running indexer tests without valid ctags" ,
203
233
RuntimeEnvironment .getInstance ().validateExuberantCtags ());
204
234
235
+ // Add a group matching the project to be added.
236
+ String groupName = "gitgroup" ;
237
+ Group group = new Group (groupName , "git.*" );
238
+ env .getGroups ().add (group );
239
+ Assert .assertTrue (env .hasGroups ());
240
+ Assert .assertEquals (1 , env .getGroups ().stream ().
241
+ filter (g -> g .getName ().equals (groupName )).
242
+ collect (Collectors .toSet ()).size ());
243
+ Assert .assertEquals (0 , group .getRepositories ().size ());
244
+ Assert .assertEquals (0 , group .getProjects ().size ());
245
+
205
246
// Firstly add some projects.
206
247
Message m = new ProjectMessage ();
207
248
m .setText ("add" );
@@ -216,6 +257,13 @@ public void testDelete() throws Exception {
216
257
Assert .assertEquals (3 , env .getRepositories ().size ());
217
258
Assert .assertEquals (3 , env .getProjectRepositoriesMap ().size ());
218
259
260
+ // Check the group was populated properly.
261
+ Assert .assertEquals (1 , group .getRepositories ().size ());
262
+ Assert .assertEquals (0 , group .getProjects ().size ());
263
+ Assert .assertEquals (1 , group .getRepositories ().stream ().
264
+ filter (p -> p .getName ().equals ("git" )).
265
+ collect (Collectors .toSet ()).size ());
266
+
219
267
// Run the indexer (ala 'indexpart') so that data directory is populated.
220
268
ArrayList <String > subFiles = new ArrayList <>();
221
269
subFiles .add ("/git" );
@@ -247,23 +295,28 @@ public void testDelete() throws Exception {
247
295
// Then remove multiple projects.
248
296
m .setText ("delete" );
249
297
m .setTags (new TreeSet <String >());
250
- m .addTag ("git" );
251
- m .addTag ("svn" );
298
+ for (String p : projectsToDelete ) {
299
+ m .addTag (p );
300
+ }
252
301
m .apply (env );
253
302
Assert .assertEquals (1 , env .getProjects ().size ());
254
303
Assert .assertEquals (1 , env .getRepositories ().size ());
255
304
Assert .assertEquals (1 , env .getProjectRepositoriesMap ().size ());
256
305
257
306
// Test data removal.
258
307
File dataRoot = env .getDataRootFile ();
259
- for (String projectName : new String []{ "git" , "svn" } ) {
308
+ for (String projectName : projectsToDelete ) {
260
309
for (String dirName : new String []{"historycache" ,
261
310
IndexDatabase .XREF_DIR , IndexDatabase .INDEX_DIR }) {
262
311
File dir = new File (env .getDataRootFile (),
263
312
dirName + File .separator + projectName );
264
313
Assert .assertFalse (dir .exists ());
265
314
}
266
315
}
316
+
317
+ // Check the group no longer contains the removed project.
318
+ Assert .assertEquals (0 , group .getRepositories ().size ());
319
+ Assert .assertEquals (0 , group .getProjects ().size ());
267
320
}
268
321
269
322
@ Test
0 commit comments