View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.maven.index.artifact;
20  
21  import java.text.ParseException;
22  import java.text.SimpleDateFormat;
23  
24  import org.junit.Test;
25  
26  import static org.junit.Assert.assertEquals;
27  import static org.junit.Assert.assertFalse;
28  import static org.junit.Assert.assertNotNull;
29  import static org.junit.Assert.assertNull;
30  import static org.junit.Assert.assertTrue;
31  
32  public class M2GavCalculatorTest {
33      private M2GavCalculator gavCalculator = new M2GavCalculator();
34  
35      private SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd.HHmmss");
36  
37      protected Long parseTimestamp(String timeStamp) throws ParseException {
38          if (timeStamp == null) {
39              return null;
40          } else {
41              return formatter.parse(timeStamp).getTime();
42          }
43      }
44  
45      @Test
46      public void testGav() throws Exception {
47          Gav gav;
48          String path;
49  
50          gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-25-javadoc.jar");
51  
52          assertEquals("org.jruby", gav.getGroupId());
53          assertEquals("jruby", gav.getArtifactId());
54          assertEquals("1.0RC1-20070504.160758-25", gav.getVersion());
55          assertEquals("1.0RC1-SNAPSHOT", gav.getBaseVersion());
56          assertEquals("javadoc", gav.getClassifier());
57          assertEquals("jar", gav.getExtension());
58          assertEquals(Integer.valueOf(25), gav.getSnapshotBuildNumber());
59          assertEquals(parseTimestamp("20070504.160758"), gav.getSnapshotTimeStamp());
60          assertEquals("jruby-1.0RC1-20070504.160758-25-javadoc.jar", gav.getName());
61          assertEquals(true, gav.isSnapshot());
62          assertEquals(false, gav.isHash());
63          assertEquals(null, gav.getHashType());
64  
65          path = gavCalculator.gavToPath(gav);
66          assertEquals("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-25-javadoc.jar", path);
67  
68          gav = gavCalculator.pathToGav(
69                  "/com/sun/xml/ws/jaxws-local-transport/2.1.3/jaxws-local-transport-2.1.3.pom.md5");
70  
71          assertEquals("com.sun.xml.ws", gav.getGroupId());
72          assertEquals("jaxws-local-transport", gav.getArtifactId());
73          assertEquals("2.1.3", gav.getVersion());
74          assertEquals("2.1.3", gav.getBaseVersion());
75          assertEquals(null, gav.getClassifier());
76          assertEquals("pom", gav.getExtension());
77          assertEquals(null, gav.getSnapshotBuildNumber());
78          assertEquals(null, gav.getSnapshotTimeStamp());
79          assertEquals("jaxws-local-transport-2.1.3.pom.md5", gav.getName());
80          assertEquals(false, gav.isSnapshot());
81          assertEquals(true, gav.isHash());
82          assertEquals(Gav.HashType.md5, gav.getHashType());
83  
84          path = gavCalculator.gavToPath(gav);
85          assertEquals("/com/sun/xml/ws/jaxws-local-transport/2.1.3/jaxws-local-transport-2.1.3.pom.md5", path);
86  
87          gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar");
88  
89          assertEquals("org.jruby", gav.getGroupId());
90          assertEquals("jruby", gav.getArtifactId());
91          assertEquals("1.0RC1-20070504.160758-2", gav.getVersion());
92          assertEquals("1.0RC1-SNAPSHOT", gav.getBaseVersion());
93          assertEquals(null, gav.getClassifier());
94          assertEquals("jar", gav.getExtension());
95          assertEquals(Integer.valueOf(2), gav.getSnapshotBuildNumber());
96          assertEquals(parseTimestamp("20070504.160758"), gav.getSnapshotTimeStamp());
97          assertEquals("jruby-1.0RC1-20070504.160758-2.jar", gav.getName());
98          assertEquals(true, gav.isSnapshot());
99          assertEquals(false, gav.isHash());
100         assertEquals(null, gav.getHashType());
101 
102         path = gavCalculator.gavToPath(gav);
103         assertEquals("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar", path);
104 
105         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar.md5");
106 
107         assertEquals("org.jruby", gav.getGroupId());
108         assertEquals("jruby", gav.getArtifactId());
109         assertEquals("1.0RC1-20070504.160758-2", gav.getVersion());
110         assertEquals("1.0RC1-SNAPSHOT", gav.getBaseVersion());
111         assertEquals(null, gav.getClassifier());
112         assertEquals("jar", gav.getExtension());
113         assertEquals(Integer.valueOf(2), gav.getSnapshotBuildNumber());
114         assertEquals(parseTimestamp("20070504.160758"), gav.getSnapshotTimeStamp());
115         assertEquals("jruby-1.0RC1-20070504.160758-2.jar.md5", gav.getName());
116         assertEquals(true, gav.isSnapshot());
117         assertEquals(true, gav.isHash());
118         assertEquals(Gav.HashType.md5, gav.getHashType());
119 
120         path = gavCalculator.gavToPath(gav);
121         assertEquals("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar.md5", path);
122 
123         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar");
124 
125         assertEquals("org.jruby", gav.getGroupId());
126         assertEquals("jruby", gav.getArtifactId());
127         assertEquals("1.0RC1-20070504.160758-2", gav.getVersion());
128         assertEquals("1.0RC1-SNAPSHOT", gav.getBaseVersion());
129         assertEquals(null, gav.getClassifier());
130         assertEquals("jar", gav.getExtension());
131         assertEquals(Integer.valueOf(2), gav.getSnapshotBuildNumber());
132         assertEquals(parseTimestamp("20070504.160758"), gav.getSnapshotTimeStamp());
133         assertEquals("jruby-1.0RC1-20070504.160758-2.jar", gav.getName());
134         assertEquals(true, gav.isSnapshot());
135         assertEquals(false, gav.isHash());
136         assertEquals(null, gav.getHashType());
137 
138         path = gavCalculator.gavToPath(gav);
139         assertEquals("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2.jar", path);
140 
141         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2-sources.jar");
142 
143         assertEquals("org.jruby", gav.getGroupId());
144         assertEquals("jruby", gav.getArtifactId());
145         assertEquals("1.0RC1-20070504.160758-2", gav.getVersion());
146         assertEquals("1.0RC1-SNAPSHOT", gav.getBaseVersion());
147         assertEquals("sources", gav.getClassifier());
148         assertEquals("jar", gav.getExtension());
149         assertEquals(Integer.valueOf(2), gav.getSnapshotBuildNumber());
150         assertEquals(parseTimestamp("20070504.160758"), gav.getSnapshotTimeStamp());
151         assertEquals("jruby-1.0RC1-20070504.160758-2-sources.jar", gav.getName());
152         assertEquals(true, gav.isSnapshot());
153         assertEquals(false, gav.isHash());
154         assertEquals(null, gav.getHashType());
155 
156         path = gavCalculator.gavToPath(gav);
157         assertEquals("/org/jruby/jruby/1.0RC1-SNAPSHOT/jruby-1.0RC1-20070504.160758-2-sources.jar", path);
158 
159         gav = gavCalculator.pathToGav(
160                 "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar.sha1");
161 
162         assertEquals("com.stchome.products.dsms.services", gav.getGroupId());
163         assertEquals("dsms-intervention-service", gav.getArtifactId());
164         assertEquals("2.4.2-64-SNAPSHOT", gav.getVersion());
165         assertEquals("2.4.2-64-SNAPSHOT", gav.getBaseVersion());
166         assertEquals(null, gav.getClassifier());
167         assertEquals("jar", gav.getExtension());
168         assertEquals(null, gav.getSnapshotBuildNumber());
169         assertEquals(null, gav.getSnapshotTimeStamp());
170         assertEquals("dsms-intervention-service-2.4.2-64-SNAPSHOT.jar.sha1", gav.getName());
171         assertEquals(true, gav.isSnapshot());
172         assertEquals(true, gav.isHash());
173         assertEquals(Gav.HashType.sha1, gav.getHashType());
174 
175         path = gavCalculator.gavToPath(gav);
176         assertEquals(
177                 "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar.sha1",
178                 path);
179 
180         gav = gavCalculator.pathToGav(
181                 "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT-javadoc.jar.sha1");
182 
183         assertEquals("com.stchome.products.dsms.services", gav.getGroupId());
184         assertEquals("dsms-intervention-service", gav.getArtifactId());
185         assertEquals("2.4.2-64-SNAPSHOT", gav.getVersion());
186         assertEquals("2.4.2-64-SNAPSHOT", gav.getBaseVersion());
187         assertEquals("javadoc", gav.getClassifier());
188         assertEquals("jar", gav.getExtension());
189         assertEquals(null, gav.getSnapshotBuildNumber());
190         assertEquals(null, gav.getSnapshotTimeStamp());
191         assertEquals("dsms-intervention-service-2.4.2-64-SNAPSHOT-javadoc.jar.sha1", gav.getName());
192         assertEquals(true, gav.isSnapshot());
193         assertEquals(true, gav.isHash());
194         assertEquals(Gav.HashType.sha1, gav.getHashType());
195 
196         path = gavCalculator.gavToPath(gav);
197         assertEquals(
198                 "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT-javadoc.jar.sha1",
199                 path);
200 
201         gav = gavCalculator.pathToGav(
202                 "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar");
203 
204         assertEquals("com.stchome.products.dsms.services", gav.getGroupId());
205         assertEquals("dsms-intervention-service", gav.getArtifactId());
206         assertEquals("2.4.2-64-SNAPSHOT", gav.getVersion());
207         assertEquals("2.4.2-64-SNAPSHOT", gav.getBaseVersion());
208         assertEquals(null, gav.getClassifier());
209         assertEquals("jar", gav.getExtension());
210         assertEquals(null, gav.getSnapshotBuildNumber());
211         assertEquals(null, gav.getSnapshotTimeStamp());
212         assertEquals("dsms-intervention-service-2.4.2-64-SNAPSHOT.jar", gav.getName());
213         assertEquals(true, gav.isSnapshot());
214         assertEquals(false, gav.isHash());
215         assertEquals(null, gav.getHashType());
216 
217         path = gavCalculator.gavToPath(gav);
218         assertEquals(
219                 "/com/stchome/products/dsms/services/dsms-intervention-service/2.4.2-64-SNAPSHOT/dsms-intervention-service-2.4.2-64-SNAPSHOT.jar",
220                 path);
221 
222         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar");
223 
224         assertEquals("org.jruby", gav.getGroupId());
225         assertEquals("jruby", gav.getArtifactId());
226         assertEquals("1.0", gav.getVersion());
227         assertEquals("1.0", gav.getBaseVersion());
228         assertEquals("javadoc", gav.getClassifier());
229         assertEquals("jar", gav.getExtension());
230         assertEquals(null, gav.getSnapshotBuildNumber());
231         assertEquals(null, gav.getSnapshotTimeStamp());
232         assertEquals("jruby-1.0-javadoc.jar", gav.getName());
233         assertEquals(false, gav.isSnapshot());
234         assertEquals(false, gav.isHash());
235         assertEquals(null, gav.getHashType());
236 
237         path = gavCalculator.gavToPath(gav);
238         assertEquals("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar", path);
239 
240         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha1");
241 
242         assertEquals("org.jruby", gav.getGroupId());
243         assertEquals("jruby", gav.getArtifactId());
244         assertEquals("1.0", gav.getVersion());
245         assertEquals("1.0", gav.getBaseVersion());
246         assertEquals("javadoc", gav.getClassifier());
247         assertEquals("jar", gav.getExtension());
248         assertEquals(null, gav.getSnapshotBuildNumber());
249         assertEquals(null, gav.getSnapshotTimeStamp());
250         assertEquals("jruby-1.0-javadoc.jar.sha1", gav.getName());
251         assertEquals(false, gav.isSnapshot());
252         assertEquals(true, gav.isHash());
253         assertEquals(Gav.HashType.sha1, gav.getHashType());
254 
255         path = gavCalculator.gavToPath(gav);
256         assertEquals("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha1", path);
257 
258         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0/jruby-1.0.jar");
259 
260         assertEquals("org.jruby", gav.getGroupId());
261         assertEquals("jruby", gav.getArtifactId());
262         assertEquals("1.0", gav.getVersion());
263         assertEquals("1.0", gav.getBaseVersion());
264         assertEquals(null, gav.getClassifier());
265         assertEquals("jar", gav.getExtension());
266         assertEquals(null, gav.getSnapshotBuildNumber());
267         assertEquals(null, gav.getSnapshotTimeStamp());
268         assertEquals("jruby-1.0.jar", gav.getName());
269         assertEquals(false, gav.isSnapshot());
270         assertEquals(false, gav.isHash());
271         assertEquals(null, gav.getHashType());
272 
273         path = gavCalculator.gavToPath(gav);
274         assertEquals("/org/jruby/jruby/1.0/jruby-1.0.jar", path);
275 
276         gav = gavCalculator.pathToGav("/activemq/activemq-core/1.2/activemq-core-1.2.pom");
277 
278         assertEquals("activemq", gav.getGroupId());
279         assertEquals("activemq-core", gav.getArtifactId());
280         assertEquals("1.2", gav.getVersion());
281         assertEquals("1.2", gav.getBaseVersion());
282         assertEquals(null, gav.getClassifier());
283         assertEquals("pom", gav.getExtension());
284         assertEquals(null, gav.getSnapshotBuildNumber());
285         assertEquals(null, gav.getSnapshotTimeStamp());
286         assertEquals("activemq-core-1.2.pom", gav.getName());
287         assertEquals(false, gav.isSnapshot());
288         assertEquals(false, gav.isHash());
289         assertEquals(null, gav.getHashType());
290 
291         path = gavCalculator.gavToPath(gav);
292         assertEquals("/activemq/activemq-core/1.2/activemq-core-1.2.pom", path);
293 
294         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0/maven-metadata.xml");
295         assertEquals(null, gav);
296 
297         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0-SNAPSHOT/maven-metadata.xml");
298         assertEquals(null, gav);
299 
300         gav = gavCalculator.pathToGav("/junit/junit/3.8/junit-3.8.jar");
301         assertEquals("junit", gav.getGroupId());
302         assertEquals("junit", gav.getArtifactId());
303         assertEquals("3.8", gav.getVersion());
304         assertEquals("3.8", gav.getBaseVersion());
305         assertEquals(null, gav.getClassifier());
306         assertEquals("jar", gav.getExtension());
307         assertEquals(null, gav.getSnapshotBuildNumber());
308         assertEquals(null, gav.getSnapshotTimeStamp());
309         assertEquals("junit-3.8.jar", gav.getName());
310         assertEquals(false, gav.isSnapshot());
311         assertEquals(false, gav.isHash());
312         assertEquals(null, gav.getHashType());
313 
314         gav = gavCalculator.pathToGav("/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT.pom");
315         assertEquals("foo1", gav.getGroupId());
316         assertEquals("foo1", gav.getArtifactId());
317         assertEquals("0.0.1-SNAPSHOT", gav.getVersion());
318         assertEquals("0.0.1-SNAPSHOT", gav.getBaseVersion());
319         assertEquals(null, gav.getClassifier());
320         assertEquals("pom", gav.getExtension());
321         assertEquals(null, gav.getSnapshotBuildNumber());
322         assertEquals(null, gav.getSnapshotTimeStamp());
323         assertEquals("foo1-0.0.1-SNAPSHOT.pom", gav.getName());
324         assertEquals(true, gav.isSnapshot());
325         assertEquals(false, gav.isHash());
326         assertEquals(null, gav.getHashType());
327 
328         path = gavCalculator.gavToPath(gav);
329         assertEquals("/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT.pom", path);
330 
331         // NEXUS-3148
332         gav = gavCalculator.pathToGav("/foo1/foo1/0.0.1SNAPSHOT/foo1-0.0.1SNAPSHOT.pom");
333         assertEquals("foo1", gav.getGroupId());
334         assertEquals("foo1", gav.getArtifactId());
335         assertEquals("0.0.1SNAPSHOT", gav.getVersion());
336         assertEquals("0.0.1SNAPSHOT", gav.getBaseVersion());
337         assertEquals(null, gav.getClassifier());
338         assertEquals("pom", gav.getExtension());
339         assertEquals(null, gav.getSnapshotBuildNumber());
340         assertEquals(null, gav.getSnapshotTimeStamp());
341         assertEquals("foo1-0.0.1SNAPSHOT.pom", gav.getName());
342         assertEquals(true, gav.isSnapshot());
343         assertEquals(false, gav.isHash());
344         assertEquals(null, gav.getHashType());
345 
346         path = gavCalculator.gavToPath(gav);
347         assertEquals("/foo1/foo1/0.0.1SNAPSHOT/foo1-0.0.1SNAPSHOT.pom", path);
348 
349         gav = gavCalculator.pathToGav("/foo1/foo1/0.0.1.SNAPSHOT/foo1-0.0.1.SNAPSHOT.pom");
350         assertEquals("foo1", gav.getGroupId());
351         assertEquals("foo1", gav.getArtifactId());
352         assertEquals("0.0.1.SNAPSHOT", gav.getVersion());
353         assertEquals("0.0.1.SNAPSHOT", gav.getBaseVersion());
354         assertEquals(null, gav.getClassifier());
355         assertEquals("pom", gav.getExtension());
356         assertEquals(null, gav.getSnapshotBuildNumber());
357         assertEquals(null, gav.getSnapshotTimeStamp());
358         assertEquals("foo1-0.0.1.SNAPSHOT.pom", gav.getName());
359         assertEquals(true, gav.isSnapshot());
360         assertEquals(false, gav.isHash());
361         assertEquals(null, gav.getHashType());
362 
363         path = gavCalculator.gavToPath(gav);
364         assertEquals("/foo1/foo1/0.0.1.SNAPSHOT/foo1-0.0.1.SNAPSHOT.pom", path);
365 
366         // NEXUS-3148 ends
367 
368         gav = gavCalculator.pathToGav("/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT-jdk14.jar");
369         assertEquals("foo1", gav.getGroupId());
370         assertEquals("foo1", gav.getArtifactId());
371         assertEquals("0.0.1-SNAPSHOT", gav.getVersion());
372         assertEquals("0.0.1-SNAPSHOT", gav.getBaseVersion());
373         assertEquals("jdk14", gav.getClassifier());
374         assertEquals("jar", gav.getExtension());
375         assertEquals(null, gav.getSnapshotBuildNumber());
376         assertEquals(null, gav.getSnapshotTimeStamp());
377         assertEquals("foo1-0.0.1-SNAPSHOT-jdk14.jar", gav.getName());
378         assertEquals(true, gav.isSnapshot());
379         assertEquals(false, gav.isHash());
380         assertEquals(null, gav.getHashType());
381 
382         path = gavCalculator.gavToPath(gav);
383         assertEquals("/foo1/foo1/0.0.1-SNAPSHOT/foo1-0.0.1-SNAPSHOT-jdk14.jar", path);
384 
385         gav = gavCalculator.pathToGav("/foo1/foo1/1.0.0-beta-4-SNAPSHOT/foo1-1.0.0-beta-4-20080623.175436-1.jar");
386         assertEquals("foo1", gav.getGroupId());
387         assertEquals("foo1", gav.getArtifactId());
388         assertEquals("1.0.0-beta-4-20080623.175436-1", gav.getVersion());
389         assertEquals("1.0.0-beta-4-SNAPSHOT", gav.getBaseVersion());
390         assertEquals(null, gav.getClassifier());
391         assertEquals("jar", gav.getExtension());
392         assertEquals(Integer.valueOf(1), gav.getSnapshotBuildNumber());
393         assertEquals(parseTimestamp("20080623.175436"), gav.getSnapshotTimeStamp());
394         assertEquals("foo1-1.0.0-beta-4-20080623.175436-1.jar", gav.getName());
395         assertEquals(true, gav.isSnapshot());
396         assertEquals(false, gav.isHash());
397         assertEquals(null, gav.getHashType());
398 
399         path = gavCalculator.gavToPath(gav);
400         assertEquals("/foo1/foo1/1.0.0-beta-4-SNAPSHOT/foo1-1.0.0-beta-4-20080623.175436-1.jar", path);
401 
402         gav = gavCalculator.pathToGav(
403                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-4-SNAPSHOT/nexus-webapp-1.0.0-beta-4-20080623.203653-349.pom");
404         assertEquals("org.sonatype.nexus", gav.getGroupId());
405         assertEquals("nexus-webapp", gav.getArtifactId());
406         assertEquals("1.0.0-beta-4-20080623.203653-349", gav.getVersion());
407         assertEquals("1.0.0-beta-4-SNAPSHOT", gav.getBaseVersion());
408         assertEquals(null, gav.getClassifier());
409         assertEquals("pom", gav.getExtension());
410         assertEquals(Integer.valueOf(349), gav.getSnapshotBuildNumber());
411         assertEquals(parseTimestamp("20080623.203653"), gav.getSnapshotTimeStamp());
412         assertEquals("nexus-webapp-1.0.0-beta-4-20080623.203653-349.pom", gav.getName());
413         assertEquals(true, gav.isSnapshot());
414         assertEquals(false, gav.isHash());
415         assertEquals(null, gav.getHashType());
416 
417         path = gavCalculator.gavToPath(gav);
418         assertEquals(
419                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-4-SNAPSHOT/nexus-webapp-1.0.0-beta-4-20080623.203653-349.pom",
420                 path);
421 
422         gav = gavCalculator.pathToGav(
423                 "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc");
424         assertEquals("org.apache.maven.artifact", gav.getGroupId());
425         assertEquals("maven-artifact", gav.getArtifactId());
426         assertEquals("3.0-20080411.005221-75", gav.getVersion());
427         assertEquals("3.0-SNAPSHOT", gav.getBaseVersion());
428         assertEquals(null, gav.getClassifier());
429         assertEquals("pom", gav.getExtension());
430         assertEquals(Integer.valueOf(75), gav.getSnapshotBuildNumber());
431         assertEquals(parseTimestamp("20080411.005221"), gav.getSnapshotTimeStamp());
432         assertEquals("maven-artifact-3.0-20080411.005221-75.pom.asc", gav.getName());
433         assertEquals(true, gav.isSnapshot());
434         assertEquals(false, gav.isHash());
435         assertEquals(null, gav.getHashType());
436         assertEquals(true, gav.isSignature());
437         assertEquals(Gav.SignatureType.gpg, gav.getSignatureType());
438 
439         path = gavCalculator.gavToPath(gav);
440         assertEquals(
441                 "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc",
442                 path);
443 
444         gav = gavCalculator.pathToGav(
445                 "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc.sha1");
446         assertEquals("org.apache.maven.artifact", gav.getGroupId());
447         assertEquals("maven-artifact", gav.getArtifactId());
448         assertEquals("3.0-20080411.005221-75", gav.getVersion());
449         assertEquals("3.0-SNAPSHOT", gav.getBaseVersion());
450         assertEquals(null, gav.getClassifier());
451         assertEquals("pom", gav.getExtension());
452         assertEquals(Integer.valueOf(75), gav.getSnapshotBuildNumber());
453         assertEquals(parseTimestamp("20080411.005221"), gav.getSnapshotTimeStamp());
454         assertEquals("maven-artifact-3.0-20080411.005221-75.pom.asc.sha1", gav.getName());
455         assertEquals(true, gav.isSnapshot());
456         assertEquals(true, gav.isHash());
457         assertEquals(Gav.HashType.sha1, gav.getHashType());
458         assertEquals(true, gav.isSignature());
459         assertEquals(Gav.SignatureType.gpg, gav.getSignatureType());
460 
461         path = gavCalculator.gavToPath(gav);
462         assertEquals(
463                 "/org/apache/maven/artifact/maven-artifact/3.0-SNAPSHOT/maven-artifact-3.0-20080411.005221-75.pom.asc.sha1",
464                 path);
465 
466         gav = gavCalculator.pathToGav(
467                 "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080302.032223-6-bin.zip.sha1");
468         assertEquals("org.apache.maven", gav.getGroupId());
469         assertEquals("maven-core", gav.getArtifactId());
470         assertEquals("2.0.9-20080302.032223-6", gav.getVersion());
471         assertEquals("2.0.9-SNAPSHOT", gav.getBaseVersion());
472         assertEquals("bin", gav.getClassifier());
473         assertEquals("zip", gav.getExtension());
474         assertEquals(Integer.valueOf(6), gav.getSnapshotBuildNumber());
475         assertEquals(parseTimestamp("20080302.032223"), gav.getSnapshotTimeStamp());
476         assertEquals("maven-core-2.0.9-20080302.032223-6-bin.zip.sha1", gav.getName());
477         assertEquals(true, gav.isSnapshot());
478         assertEquals(true, gav.isHash());
479         assertEquals(Gav.HashType.sha1, gav.getHashType());
480         assertEquals(false, gav.isSignature());
481 
482         path = gavCalculator.gavToPath(gav);
483         assertEquals(
484                 "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080302.032223-6-bin.zip.sha1", path);
485 
486         gav = gavCalculator.pathToGav(
487                 "/org/apache/maven/maven-core/2.0.9-SNAPSHOT/maven-core-2.0.9-20080302.032223-6-bin.tar.gz");
488         assertEquals("org.apache.maven", gav.getGroupId());
489         assertEquals("maven-core", gav.getArtifactId());
490         assertEquals("2.0.9-20080302.032223-6", gav.getVersion());
491         assertEquals("2.0.9-SNAPSHOT", gav.getBaseVersion());
492         assertEquals("bin", gav.getClassifier());
493         assertEquals("tar.gz", gav.getExtension());
494         assertEquals(Integer.valueOf(6), gav.getSnapshotBuildNumber());
495         assertEquals(parseTimestamp("20080302.032223"), gav.getSnapshotTimeStamp());
496         assertEquals("maven-core-2.0.9-20080302.032223-6-bin.tar.gz", gav.getName());
497         assertEquals(true, gav.isSnapshot());
498         assertEquals(false, gav.isHash());
499         assertEquals(null, gav.getHashType());
500         assertEquals(false, gav.isSignature());
501 
502         gav = gavCalculator.pathToGav("/org/sonatype/nexus/nexus-webapp/1.4.0/nexus-webapp-1.4.0-bundle.tar.gz");
503         assertEquals("org.sonatype.nexus", gav.getGroupId());
504         assertEquals("nexus-webapp", gav.getArtifactId());
505         assertEquals("1.4.0", gav.getVersion());
506         assertEquals("1.4.0", gav.getBaseVersion());
507         assertEquals("bundle", gav.getClassifier());
508         assertEquals("tar.gz", gav.getExtension());
509         assertEquals(null, gav.getSnapshotBuildNumber());
510         assertEquals(null, gav.getSnapshotTimeStamp());
511         assertEquals("nexus-webapp-1.4.0-bundle.tar.gz", gav.getName());
512         assertEquals(false, gav.isSnapshot());
513         assertEquals(false, gav.isHash());
514         assertEquals(null, gav.getHashType());
515         assertEquals(false, gav.isSignature());
516 
517         path = gavCalculator.gavToPath(gav);
518         assertEquals("/org/sonatype/nexus/nexus-webapp/1.4.0/nexus-webapp-1.4.0-bundle.tar.gz", path);
519 
520         gav = gavCalculator.pathToGav("/foo/artifact/SNAPSHOT/artifact-SNAPSHOT.jar");
521         assertEquals("foo", gav.getGroupId());
522         assertEquals("artifact", gav.getArtifactId());
523         assertEquals("SNAPSHOT", gav.getVersion());
524         assertEquals("SNAPSHOT", gav.getBaseVersion());
525         assertEquals(null, gav.getClassifier());
526         assertEquals("jar", gav.getExtension());
527         assertEquals(null, gav.getSnapshotBuildNumber());
528         assertEquals(null, gav.getSnapshotTimeStamp());
529         assertEquals("artifact-SNAPSHOT.jar", gav.getName());
530         assertEquals(true, gav.isSnapshot());
531         assertEquals(false, gav.isHash());
532         assertEquals(null, gav.getHashType());
533 
534         path = gavCalculator.gavToPath(gav);
535         assertEquals("/foo/artifact/SNAPSHOT/artifact-SNAPSHOT.jar", path);
536 
537         gav = gavCalculator.pathToGav("/foo/artifact/SNAPSHOT/artifact-20080623.175436-1.jar");
538         assertEquals("foo", gav.getGroupId());
539         assertEquals("artifact", gav.getArtifactId());
540         assertEquals("20080623.175436-1", gav.getVersion());
541         assertEquals("SNAPSHOT", gav.getBaseVersion());
542         assertEquals(null, gav.getClassifier());
543         assertEquals("jar", gav.getExtension());
544         assertEquals(Integer.valueOf(1), gav.getSnapshotBuildNumber());
545         assertEquals(parseTimestamp("20080623.175436"), gav.getSnapshotTimeStamp());
546         assertEquals("artifact-20080623.175436-1.jar", gav.getName());
547         assertEquals(true, gav.isSnapshot());
548         assertEquals(false, gav.isHash());
549         assertEquals(null, gav.getHashType());
550 
551         path = gavCalculator.gavToPath(gav);
552         assertEquals("/foo/artifact/SNAPSHOT/artifact-20080623.175436-1.jar", path);
553 
554         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha256");
555 
556         assertEquals("org.jruby", gav.getGroupId());
557         assertEquals("jruby", gav.getArtifactId());
558         assertEquals("1.0", gav.getVersion());
559         assertEquals("1.0", gav.getBaseVersion());
560         assertEquals("javadoc", gav.getClassifier());
561         assertEquals("jar", gav.getExtension());
562         assertEquals(null, gav.getSnapshotBuildNumber());
563         assertEquals(null, gav.getSnapshotTimeStamp());
564         assertEquals("jruby-1.0-javadoc.jar.sha256", gav.getName());
565         assertEquals(false, gav.isSnapshot());
566         assertEquals(true, gav.isHash());
567         assertEquals(Gav.HashType.sha256, gav.getHashType());
568 
569         path = gavCalculator.gavToPath(gav);
570         assertEquals("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha256", path);
571 
572         gav = gavCalculator.pathToGav("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha512");
573         assertEquals("org.jruby", gav.getGroupId());
574         assertEquals("jruby", gav.getArtifactId());
575         assertEquals("1.0", gav.getVersion());
576         assertEquals("1.0", gav.getBaseVersion());
577         assertEquals("javadoc", gav.getClassifier());
578         assertEquals("jar", gav.getExtension());
579         assertEquals(null, gav.getSnapshotBuildNumber());
580         assertEquals(null, gav.getSnapshotTimeStamp());
581         assertEquals("jruby-1.0-javadoc.jar.sha512", gav.getName());
582         assertEquals(false, gav.isSnapshot());
583         assertEquals(true, gav.isHash());
584         assertEquals(Gav.HashType.sha512, gav.getHashType());
585 
586         path = gavCalculator.gavToPath(gav);
587         assertEquals("/org/jruby/jruby/1.0/jruby-1.0-javadoc.jar.sha512", path);
588 
589         gav = gavCalculator.pathToGav("/dev/mbien/hintmod/1.0-SNAPSHOT/hintmod-1.0-SNAPSHOT.pom");
590         assertEquals("dev.mbien", gav.getGroupId());
591         assertEquals("hintmod", gav.getArtifactId());
592         assertEquals("1.0-SNAPSHOT", gav.getVersion());
593         assertEquals("1.0-SNAPSHOT", gav.getBaseVersion());
594         assertEquals(null, gav.getClassifier());
595         assertEquals("pom", gav.getExtension());
596         assertEquals("hintmod-1.0-SNAPSHOT.pom", gav.getName());
597         assertEquals(true, gav.isSnapshot());
598         assertEquals(false, gav.isHash());
599         assertEquals(null, gav.getHashType());
600 
601         path = gavCalculator.gavToPath(gav);
602         assertEquals("/dev/mbien/hintmod/1.0-SNAPSHOT/hintmod-1.0-SNAPSHOT.pom", path);
603 
604         gav = gavCalculator.pathToGav(
605                 "/dev/mbien/hintmod/1.0-SNAPSHOT/maven-metadata-local.xml"); // causes MINDEXER-144
606         assertNull(gav);
607         gav = gavCalculator.pathToGav("/dev/mbien/hintmod/maven-metadata-local.xml");
608         assertNull(gav);
609         gav = gavCalculator.pathToGav("/dev/mbien/hintmod/1.0-SNAPSHOT/_remote.repositories"); // causes MINDEXER-164
610         assertNull(gav);
611         gav = gavCalculator.pathToGav("/dev/mbien/hintmod/1.0-SNAPSHOT/_maven.repositories");
612         assertNull(gav);
613     }
614 
615     @Test
616     public void testNegGav() throws Exception {
617         Gav gav;
618 
619         // NEXUS-4132
620         gav = gavCalculator.pathToGav(
621                 "/com/electrabel/connection-register-ear/1.2-SNAPSHOT/connection-register-ear-1.2-20101214.143755.ear");
622         assertNull("Should fail, since the filename lacks the -BBB build number, hence, is not valid snapshot", gav);
623         // NEXUS-4132 END
624     }
625 
626     @Test
627     public void testGavExtreme() throws Exception {
628         Gav gav;
629 
630         gav = gavCalculator.pathToGav("/");
631         assertEquals(null, gav);
632 
633         gav = gavCalculator.pathToGav("/some/stupid/path");
634         assertEquals(null, gav);
635 
636         gav = gavCalculator.pathToGav("/some/stupid/path/more/in/it");
637         assertEquals(null, gav);
638 
639         gav = gavCalculator.pathToGav("/something/that/looks/");
640         assertEquals(null, gav);
641 
642         gav = gavCalculator.pathToGav("/something/that/looks/like-an-artifact.blah");
643         assertEquals(null, gav);
644 
645         gav = gavCalculator.pathToGav("/something/that/looks/like-an-artifact.pom");
646         assertEquals(null, gav);
647 
648         gav = gavCalculator.pathToGav("org/apache/maven/scm/maven-scm");
649         assertEquals(null, gav);
650 
651         gav = gavCalculator.pathToGav("org/apache/geronimo/javamail/geronimo-javamail_1.4_mail");
652         assertEquals(null, gav);
653 
654         // this is metadata, will return null
655         gav = gavCalculator.pathToGav("/something/that/looks/maven-metadata.xml");
656         assertEquals(null, gav);
657 
658         // this is metadata, will return null
659         gav = gavCalculator.pathToGav("/something/that/looks/like-SNAPSHOT/maven-metadata.xml");
660         assertEquals(null, gav);
661 
662         // this is metadata, will return null
663         gav = gavCalculator.pathToGav("/org/codehaus/plexus/plexus-container-default/maven-metadata.xml");
664         assertEquals(null, gav);
665     }
666 
667     @Test
668     public void testIssueNexus57() throws Exception {
669         // broken path, baseVersion and version mismatch (2.0-SNAPSHOT vs 2.0-alpha-1...)
670         Gav gav = gavCalculator.pathToGav(
671                 "/org/apache/maven/plugins/maven-dependency-plugin/2.0-SNAPSHOT/maven-dependency-plugin-2.0-alpha-1-20070109.165112-13.jar");
672 
673         assertNull("We expect null since baseVersion and version mismatch in path!", gav);
674     }
675 
676     @Test
677     public void testGavExtensionAndClassifier() throws Exception {
678         Gav gav;
679 
680         gav = gavCalculator.pathToGav("/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5/nexus-webapp-1.0.0-beta-5.tar.gz");
681         assertNotNull(gav);
682         assertEquals("tar.gz", gav.getExtension());
683         assertEquals(null, gav.getClassifier());
684         assertEquals("1.0.0-beta-5", gav.getVersion());
685 
686         gav = gavCalculator.pathToGav(
687                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5/nexus-webapp-1.0.0-beta-5-bundle.tar.gz");
688         assertNotNull(gav);
689         assertEquals("tar.gz", gav.getExtension());
690         assertEquals("bundle", gav.getClassifier());
691         assertEquals("1.0.0-beta-5", gav.getVersion());
692 
693         gav = gavCalculator.pathToGav(
694                 "/org/codehaus/tycho/tycho-distribution/0.3.0-SNAPSHOT/tycho-distribution-0.3.0-SNAPSHOT-bin.tar.gz");
695         assertNotNull(gav);
696         assertEquals("tar.gz", gav.getExtension());
697         assertEquals("bin", gav.getClassifier());
698         assertEquals("0.3.0-SNAPSHOT", gav.getVersion());
699 
700         gav = gavCalculator.pathToGav(
701                 "/org/codehaus/tycho/tycho-distribution/SNAPSHOT/tycho-distribution-SNAPSHOT-bin.tar.gz");
702         assertNotNull(gav);
703         assertEquals("tar.gz", gav.getExtension());
704         assertEquals("bin", gav.getClassifier());
705         assertEquals("SNAPSHOT", gav.getVersion());
706 
707         gav = gavCalculator.pathToGav(
708                 "/org/codehaus/tycho/tycho-distribution/0.3.0-SNAPSHOT/tycho-distribution-0.3.0-20080818.153246-33-bin.tar.gz");
709         assertNotNull(gav);
710         assertEquals("tar.gz", gav.getExtension());
711         assertEquals("bin", gav.getClassifier());
712         assertEquals("0.3.0-20080818.153246-33", gav.getVersion());
713 
714         gav = gavCalculator.pathToGav(
715                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-4.2/nexus-webapp-1.0.0-beta-4.2-javadoc.jar");
716         assertNotNull(gav);
717         assertEquals("jar", gav.getExtension());
718         assertEquals("javadoc", gav.getClassifier());
719         assertEquals("1.0.0-beta-4.2", gav.getVersion());
720 
721         gav = gavCalculator.pathToGav(
722                 "/org/codehaus/tycho/tycho-distribution/0.3.0-SNAPSHOT/tycho-distribution-0.3.0-20080818.153246-33-bin.zip");
723         assertNotNull(gav);
724         assertEquals("zip", gav.getExtension());
725         assertEquals("bin", gav.getClassifier());
726         assertEquals("0.3.0-20080818.153246-33", gav.getVersion());
727 
728         gav = gavCalculator.pathToGav(
729                 "/org/sonatype/nexus/tools/nexus-migration-app/1.0.0-beta-6-SNAPSHOT/nexus-migration-app-1.0.0-beta-6-20080809.181715-2-cli.jar");
730         assertNotNull(gav);
731         assertEquals("jar", gav.getExtension());
732         assertEquals("cli", gav.getClassifier());
733         assertEquals("1.0.0-beta-6-20080809.181715-2", gav.getVersion());
734     }
735 
736     @Test
737     public void testGavSnapshotVersion() throws Exception {
738         Gav gav;
739 
740         gav = gavCalculator.pathToGav(
741                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT/nexus-webapp-1.0.0-beta-5-SNAPSHOT.tar.gz");
742         assertNotNull(gav);
743         assertEquals("tar.gz", gav.getExtension());
744         assertEquals(null, gav.getClassifier());
745         assertEquals("1.0.0-beta-5-SNAPSHOT", gav.getVersion());
746         assertTrue(gav.isSnapshot());
747 
748         gav = gavCalculator.pathToGav(
749                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT-1234/nexus-webapp-1.0.0-beta-5-SNAPSHOT-1234.tar.gz");
750         assertNotNull(gav);
751         assertEquals("tar.gz", gav.getExtension());
752         assertEquals(null, gav.getClassifier());
753         assertEquals("1.0.0-beta-5-SNAPSHOT-1234", gav.getVersion());
754         assertFalse(gav.isSnapshot());
755 
756         gav = gavCalculator.pathToGav(
757                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT/nexus-webapp-1.0.0-beta-5-SNAPSHOT-bundle.tar.gz");
758         assertNotNull(gav);
759         assertEquals("tar.gz", gav.getExtension());
760         assertEquals("bundle", gav.getClassifier());
761         assertEquals("1.0.0-beta-5-SNAPSHOT", gav.getVersion());
762         assertTrue(gav.isSnapshot());
763 
764         gav = gavCalculator.pathToGav(
765                 "/org/sonatype/nexus/nexus-webapp/1.0.0-beta-5-SNAPSHOT-1234/nexus-webapp-1.0.0-beta-5-SNAPSHOT-1234-bundle.tar.gz");
766         assertNotNull(gav);
767         assertEquals("tar.gz", gav.getExtension());
768         assertEquals("bundle", gav.getClassifier());
769         assertEquals("1.0.0-beta-5-SNAPSHOT-1234", gav.getVersion());
770         assertFalse(gav.isSnapshot());
771     }
772 
773     @Test
774     public void testGavLooseStrictedSnapshot() throws Exception {
775         Gav gav;
776 
777         gav = gavCalculator.pathToGav("/org/sonatype/nexus-3148/1.0.SNAPSHOT/nexus-3148-1.0.20100111.064938-1.pom");
778         assertNotNull(gav);
779         assertEquals("pom", gav.getExtension());
780         assertEquals("1.0.20100111.064938-1", gav.getVersion());
781         assertEquals("1.0.SNAPSHOT", gav.getBaseVersion());
782         assertEquals("org.sonatype", gav.getGroupId());
783         assertEquals("nexus-3148", gav.getArtifactId());
784         assertEquals(null, gav.getClassifier());
785         assertEquals("pom", gav.getExtension());
786         assertEquals(Integer.valueOf(1), gav.getSnapshotBuildNumber());
787         // the timestamp is UTC, not EST timezoned!
788         // also, the Gav is it seems TZ sensitive!!!
789         assertEquals(parseTimestamp("20100111.064938"), gav.getSnapshotTimeStamp());
790         assertEquals("nexus-3148-1.0.20100111.064938-1.pom", gav.getName());
791         assertEquals(true, gav.isSnapshot());
792         assertEquals(false, gav.isHash());
793         assertEquals(null, gav.getHashType());
794 
795         String path = gavCalculator.gavToPath(gav);
796         assertEquals("/org/sonatype/nexus-3148/1.0.SNAPSHOT/nexus-3148-1.0.20100111.064938-1.pom", path);
797     }
798 }