1 package org.apache.maven.index;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.FileInputStream;
24 import java.util.HashSet;
25 import java.util.Properties;
26 import java.util.Set;
27
28 import junit.framework.Assert;
29
30 import org.apache.maven.index.NexusIndexer;
31 import org.apache.maven.index.context.IndexingContext;
32 import org.apache.maven.index.packer.IndexPacker;
33 import org.apache.maven.index.packer.IndexPackingRequest;
34 import org.codehaus.plexus.util.FileUtils;
35
36 public class Nexus1911IncrementalTest
37 extends AbstractIndexCreatorHelper
38 {
39 NexusIndexer indexer;
40
41 IndexingContext context;
42
43 IndexingContext reindexedContext;
44
45 IndexPacker packer;
46
47 File indexDir;
48
49 File indexPackDir;
50
51 File reposTargetDir;
52
53 @Override
54 protected void setUp()
55 throws Exception
56 {
57 super.setUp();
58
59 indexer = lookup( NexusIndexer.class );
60 packer = lookup( IndexPacker.class );
61
62 indexDir = super.getDirectory( "index/nexus-1911" );
63 indexPackDir = indexDir;
64
65 File reposSrcDir = new File( getBasedir(), "src/test/nexus-1911" );
66 this.reposTargetDir = super.getDirectory( "repos/nexus-1911" );
67
68 FileUtils.copyDirectoryStructure( reposSrcDir, reposTargetDir );
69
70 File repo = new File( reposTargetDir, "repo" );
71 repo.mkdirs();
72 reindexedContext =
73 context = indexer.addIndexingContext( "test", "test", repo, indexDir, null, null, DEFAULT_CREATORS );
74 indexer.scan( context );
75 }
76
77 @Override
78 protected void tearDown()
79 throws Exception
80 {
81 indexer.removeIndexingContext( context, true );
82 super.deleteDirectory( this.reposTargetDir );
83 super.deleteDirectory( this.indexDir );
84 super.deleteDirectory( this.indexPackDir );
85 super.tearDown();
86 }
87
88 public void testNoIncremental()
89 throws Exception
90 {
91 IndexPackingRequest request = new IndexPackingRequest( context, indexPackDir );
92 request.setCreateIncrementalChunks( true );
93 packer.packIndex( request );
94
95 Set<String> filenames = getFilenamesFromFiles( indexPackDir.listFiles() );
96 Properties props = getPropertiesFromFiles( indexPackDir.listFiles() );
97
98 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".zip" ) );
99 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".gz" ) );
100 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".properties" ) );
101 Assert.assertFalse( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".1.gz" ) );
102 Assert.assertFalse( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".2.gz" ) );
103
104 Assert.assertNotNull( props );
105
106 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "0" ) );
107 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "1" ) );
108 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "2" ) );
109 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "3" ) );
110 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "4" ) );
111 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_COUNTER ), "0" );
112 Assert.assertNotNull( props.getProperty( IndexingContext.INDEX_CHAIN_ID ) );
113 }
114
115 public void test1Incremental()
116 throws Exception
117 {
118 IndexPackingRequest request = new IndexPackingRequest( context, indexPackDir );
119 request.setCreateIncrementalChunks( true );
120 packer.packIndex( request );
121
122 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-1" ), request );
123
124 Set<String> filenames = getFilenamesFromFiles( indexPackDir.listFiles() );
125 Properties props = getPropertiesFromFiles( indexPackDir.listFiles() );
126
127 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".zip" ) );
128 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".gz" ) );
129 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".properties" ) );
130 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".1.gz" ) );
131 Assert.assertFalse( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".2.gz" ) );
132
133 Assert.assertNotNull( props );
134
135 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "0" ), "1" );
136 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "1" ) );
137 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "2" ) );
138 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "3" ) );
139 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "4" ) );
140 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_COUNTER ), "1" );
141 Assert.assertNotNull( props.getProperty( IndexingContext.INDEX_CHAIN_ID ) );
142 }
143
144 public void test2Incremental()
145 throws Exception
146 {
147 IndexPackingRequest request = new IndexPackingRequest( context, indexPackDir );
148 request.setCreateIncrementalChunks( true );
149 packer.packIndex( request );
150
151 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-1" ), request );
152 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-2" ), request );
153
154 Set<String> filenames = getFilenamesFromFiles( indexPackDir.listFiles() );
155 Properties props = getPropertiesFromFiles( indexPackDir.listFiles() );
156
157 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".zip" ) );
158 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".gz" ) );
159 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".properties" ) );
160 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".1.gz" ) );
161 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".2.gz" ) );
162 Assert.assertFalse( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".3.gz" ) );
163
164 Assert.assertNotNull( props );
165
166 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "0" ), "2" );
167 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "1" ), "1" );
168 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "2" ) );
169 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "3" ) );
170 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "4" ) );
171 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_COUNTER ), "2" );
172 Assert.assertNotNull( props.getProperty( IndexingContext.INDEX_CHAIN_ID ) );
173 }
174
175 public void test3Incremental()
176 throws Exception
177 {
178 IndexPackingRequest request = new IndexPackingRequest( context, indexPackDir );
179 request.setCreateIncrementalChunks( true );
180 packer.packIndex( request );
181
182 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-1" ), request );
183 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-2" ), request );
184 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-3" ), request );
185
186 Set<String> filenames = getFilenamesFromFiles( indexPackDir.listFiles() );
187 Properties props = getPropertiesFromFiles( indexPackDir.listFiles() );
188
189 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".zip" ) );
190 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".gz" ) );
191 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".properties" ) );
192 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".1.gz" ) );
193 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".2.gz" ) );
194 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".3.gz" ) );
195
196 Assert.assertNotNull( props );
197
198 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "0" ), "3" );
199 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "1" ), "2" );
200 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "2" ), "1" );
201 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "3" ) );
202 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "4" ) );
203 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_COUNTER ), "3" );
204 Assert.assertNotNull( props.getProperty( IndexingContext.INDEX_CHAIN_ID ) );
205 }
206
207 public void testMaxChunks()
208 throws Exception
209 {
210 IndexPackingRequest request = new IndexPackingRequest( context, indexPackDir );
211 request.setCreateIncrementalChunks( true );
212 request.setMaxIndexChunks( 3 );
213 packer.packIndex( request );
214
215 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-1" ), request );
216 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-2" ), request );
217 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-3" ), request );
218 copyRepoContentsAndReindex( new File( getBasedir(), "src/test/nexus-1911/repo-inc-4" ), request );
219
220 Set<String> filenames = getFilenamesFromFiles( indexPackDir.listFiles() );
221 Properties props = getPropertiesFromFiles( indexPackDir.listFiles() );
222
223 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".zip" ) );
224 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".gz" ) );
225 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".properties" ) );
226 Assert.assertFalse( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".1.gz" ) );
227 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".2.gz" ) );
228 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".3.gz" ) );
229 Assert.assertTrue( filenames.contains( IndexingContext.INDEX_FILE_PREFIX + ".4.gz" ) );
230
231 Assert.assertNotNull( props );
232
233 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "0" ), "4" );
234 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "1" ), "3" );
235 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "2" ), "2" );
236 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "3" ) );
237 Assert.assertNull( props.getProperty( IndexingContext.INDEX_CHUNK_PREFIX + "4" ) );
238 Assert.assertEquals( props.getProperty( IndexingContext.INDEX_CHUNK_COUNTER ), "4" );
239 Assert.assertNotNull( props.getProperty( IndexingContext.INDEX_CHAIN_ID ) );
240 }
241
242 private void copyRepoContentsAndReindex( File src, IndexPackingRequest request )
243 throws Exception
244 {
245 File reposTargetDir = new File( getBasedir(), "target/repos/nexus-1911/repo" );
246
247 FileUtils.copyDirectoryStructure( src, reposTargetDir );
248
249
250
251 indexer.scan( reindexedContext, false );
252
253 packer.packIndex( request );
254 }
255
256 private Set<String> getFilenamesFromFiles( File[] files )
257 {
258 Set<String> filenames = new HashSet<String>();
259
260 for ( int i = 0; i < files.length; i++ )
261 {
262 filenames.add( files[i].getName() );
263 }
264
265 return filenames;
266 }
267
268 private Properties getPropertiesFromFiles( File[] files )
269 throws Exception
270 {
271 Properties props = new Properties();
272 File propertyFile = null;
273
274 for ( int i = 0; i < files.length; i++ )
275 {
276 if ( ( IndexingContext.INDEX_REMOTE_PROPERTIES_FILE ).equalsIgnoreCase( files[i].getName() ) )
277 {
278 propertyFile = files[i];
279 break;
280 }
281 }
282
283 FileInputStream fis = null;
284
285 try
286 {
287 fis = new FileInputStream( propertyFile );
288 props.load( fis );
289 }
290 finally
291 {
292 fis.close();
293 }
294
295 return props;
296 }
297 }