View Javadoc

1   package org.apache.maven.wagon.shared.http;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.io.InputStream;
23  import java.util.Collections;
24  import java.util.Iterator;
25  import java.util.List;
26  
27  import junit.framework.TestCase;
28  
29  import org.apache.log4j.Logger;
30  import org.apache.maven.wagon.TransferFailedException;
31  
32  /**
33   * Unit Tests for the HtmlFileListParser
34   */
35  public class HtmlFileListParserTest
36      extends TestCase
37  {
38      private static Logger logger = Logger.getLogger( HtmlFileListParserTest.class );
39  
40      private void assertContainsExpected( List/*<String>*/links, String[] expected )
41      {
42          if ( expected.length != links.size() )
43          {
44              Collections.sort( links );
45              for ( Iterator iterator = links.iterator(); iterator.hasNext(); )
46              {
47                  String link = (String) iterator.next();
48                  logger.info( "   \"" + link + "\", " );
49              }
50              assertEquals( "Links to Expected size", expected.length, links.size() );
51          }
52  
53          for ( int i = 0; i < expected.length; i++ )
54          {
55              assertTrue( "Should find [" + expected[i] + "] in link list", links.contains( expected[i] ) );
56          }
57      }
58  
59      private void assertNotContainingAvoided( List/*<String>*/links, String[] avoided )
60      {
61          for ( int i = 0; i < avoided.length; i++ )
62          {
63              assertFalse( "Should not find [" + avoided[i] + "] in link list", links.contains( avoided[i] ) );
64          }
65      }
66  
67      private List/*<String>*/parseLinks( String url, String filename )
68          throws TransferFailedException
69      {
70          InputStream is = this.getClass().getResourceAsStream( "/filelistings/" + filename );
71          List files = HtmlFileListParser.parseFileList( url, is );
72  
73          assertNotNull( "file list should not be null.", files );
74          assertFalse( "file list should not be empty.", files.isEmpty() );
75  
76          /* Debug */
77          if ( false )
78          {
79              Iterator it = files.iterator();
80              while ( it.hasNext() )
81              {
82                  logger.info( "File: '" + it.next() + "'" );
83              }
84          }
85  
86          return files;
87      }
88  
89      /**
90       * Example showing jetty directory browsing of commons-lang 
91       * 
92       * @throws TransferFailedException
93       */
94      public void testParseCommonsLang()
95          throws TransferFailedException
96      {
97          List/*<String>*/links = parseLinks( "http://localhost/repository/commons-lang/commons-lang/2.3" target="alexandria_uri">http://localhost/repository/commons-lang/commons-lang/2.3",
98                                               "commons-lang.html" );
99  
100         String[] expected = new String[] {
101             "commons-lang-2.3-javadoc.jar",
102             "commons-lang-2.3-javadoc.jar.asc",
103             "commons-lang-2.3-javadoc.jar.md5",
104             "commons-lang-2.3-javadoc.jar.sha1",
105             "commons-lang-2.3-sources.jar",
106             "commons-lang-2.3-sources.jar.asc",
107             "commons-lang-2.3-sources.jar.md5",
108             "commons-lang-2.3-sources.jar.sha1",
109             "commons-lang-2.3.jar",
110             "commons-lang-2.3.jar.asc",
111             "commons-lang-2.3.jar.md5",
112             "commons-lang-2.3.jar.sha1",
113             "commons-lang-2.3.pom",
114             "commons-lang-2.3.pom.md5",
115             "commons-lang-2.3.pom.sha1",
116             "maven-metadata.xml",
117             "maven-metadata.xml.md5",
118             "maven-metadata.xml.sha1" };
119 
120         assertContainsExpected( links, expected );
121 
122         String[] avoided = new String[] { "../" };
123 
124         assertNotContainingAvoided( links, avoided );
125     }
126 
127     public void testParseIbiblio()
128         throws Exception
129     {
130         List/*<String>*/links = parseLinks( "http://www.ibiblio.org/maven2/org/apache/maven/wagon/" target="alexandria_uri">http://www.ibiblio.org/maven2/org/apache/maven/wagon/",
131                                              "ibiblio-wagon.html" );
132 
133         String[] expected = new String[] {
134             "wagon-1.0-alpha-2.pom",
135             "wagon-1.0-alpha-2.pom.asc",
136             "wagon-1.0-alpha-2.pom.md5",
137             "wagon-1.0-alpha-2.pom.sha1",
138             "wagon-1.0-alpha-3-20050413.021234-4.pom",
139             "wagon-1.0-alpha-3-20050413.021234-4.pom.md5",
140             "wagon-1.0-alpha-3-20050413.021234-4.pom.sha1",
141             "wagon-1.0-alpha-3-20050419.043745-5.pom",
142             "wagon-1.0-alpha-3-20050419.043745-5.pom.md5",
143             "wagon-1.0-alpha-3-20050419.043745-5.pom.sha1",
144             "wagon-1.0-alpha-3-20050419.044035-6.pom",
145             "wagon-1.0-alpha-3-20050419.044035-6.pom.md5",
146             "wagon-1.0-alpha-3-20050419.044035-6.pom.sha1",
147             "wagon-1.0-alpha-3-20050421.162738-7.pom",
148             "wagon-1.0-alpha-3-20050421.162738-7.pom.md5",
149             "wagon-1.0-alpha-3-20050421.162738-7.pom.sha1",
150             "wagon-1.0-alpha-3-20050422.075233-8.pom",
151             "wagon-1.0-alpha-3-20050422.075233-8.pom.md5",
152             "wagon-1.0-alpha-3-20050422.075233-8.pom.sha1",
153             "wagon-1.0-alpha-3-20050429.051847-9.pom",
154             "wagon-1.0-alpha-3-20050429.051847-9.pom.md5",
155             "wagon-1.0-alpha-3-20050429.051847-9.pom.sha1",
156             "wagon-file/",
157             "wagon-ftp/",
158             "wagon-http-lightweight/",
159             "wagon-http/",
160             "wagon-lightweight-http/",
161             "wagon-provider-api/",
162             "wagon-provider-test/",
163             "wagon-provider/",
164             "wagon-providers-1.0-alpha-2.pom",
165             "wagon-providers-1.0-alpha-2.pom.asc",
166             "wagon-providers-1.0-alpha-2.pom.md5",
167             "wagon-providers-1.0-alpha-2.pom.sha1",
168             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom",
169             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.md5",
170             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.sha1",
171             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom",
172             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.md5",
173             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.sha1",
174             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom",
175             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.md5",
176             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.sha1",
177             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom",
178             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.md5",
179             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.sha1",
180             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom",
181             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.md5",
182             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.sha1",
183             "wagon-providers/",
184             "wagon-scm/",
185             "wagon-ssh-external/",
186             "wagon-ssh/",
187             "wagon-webdav/",
188             "wagon/" };
189 
190         assertContainsExpected( links, expected );
191 
192         String[] avoided = new String[] { "/org/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A", "?D=A", "?M=A", "?N=D", "?S=A" };
193 
194         assertNotContainingAvoided( links, avoided );
195     }
196 
197     /**
198      * Test of an html which is improperly formatted, and contains full host-specific paths to the resources.
199      * @throws Exception
200      */
201     public void testParseJetty()
202         throws Exception
203     {
204         List/*<String>*/links = parseLinks( "http://www.ibiblio.org/maven2/org/apache/maven/wagon/" target="alexandria_uri">http://www.ibiblio.org/maven2/org/apache/maven/wagon/",
205                                              "jetty-wagon.html" );
206 
207         String[] expected = new String[] {
208             "wagon-1.0-alpha-2.pom",
209             "wagon-1.0-alpha-2.pom.asc",
210             "wagon-1.0-alpha-2.pom.md5",
211             "wagon-1.0-alpha-2.pom.sha1",
212             "wagon-1.0-alpha-3-20050413.021234-4.pom",
213             "wagon-1.0-alpha-3-20050413.021234-4.pom.md5",
214             "wagon-1.0-alpha-3-20050413.021234-4.pom.sha1",
215             "wagon-1.0-alpha-3-20050419.043745-5.pom",
216             "wagon-1.0-alpha-3-20050419.043745-5.pom.md5",
217             "wagon-1.0-alpha-3-20050419.043745-5.pom.sha1",
218             "wagon-1.0-alpha-3-20050419.044035-6.pom",
219             "wagon-1.0-alpha-3-20050419.044035-6.pom.md5",
220             "wagon-1.0-alpha-3-20050419.044035-6.pom.sha1",
221             "wagon-1.0-alpha-3-20050421.162738-7.pom",
222             "wagon-1.0-alpha-3-20050421.162738-7.pom.md5",
223             "wagon-1.0-alpha-3-20050421.162738-7.pom.sha1",
224             "wagon-1.0-alpha-3-20050422.075233-8.pom",
225             "wagon-1.0-alpha-3-20050422.075233-8.pom.md5",
226             "wagon-1.0-alpha-3-20050422.075233-8.pom.sha1",
227             "wagon-1.0-alpha-3-20050429.051847-9.pom",
228             "wagon-1.0-alpha-3-20050429.051847-9.pom.md5",
229             "wagon-1.0-alpha-3-20050429.051847-9.pom.sha1",
230             "wagon-file/",
231             "wagon-ftp/",
232             "wagon-http-lightweight/",
233             "wagon-http/",
234             "wagon-lightweight-http/",
235             "wagon-provider-api/",
236             "wagon-provider-test/",
237             "wagon-provider/",
238             "wagon-providers-1.0-alpha-2.pom",
239             "wagon-providers-1.0-alpha-2.pom.asc",
240             "wagon-providers-1.0-alpha-2.pom.md5",
241             "wagon-providers-1.0-alpha-2.pom.sha1",
242             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom",
243             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.md5",
244             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.sha1",
245             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom",
246             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.md5",
247             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.sha1",
248             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom",
249             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.md5",
250             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.sha1",
251             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom",
252             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.md5",
253             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.sha1",
254             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom",
255             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.md5",
256             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.sha1",
257             "wagon-providers/",
258             "wagon-scm/",
259             "wagon-ssh-external/",
260             "wagon-ssh/",
261             "wagon-webdav/",
262             "wagon/" };
263 
264         assertContainsExpected( links, expected );
265 
266         String[] avoided = new String[] { "/org/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A" };
267 
268         assertNotContainingAvoided( links, avoided );
269     }
270 
271     /**
272      * Test of an html which is improperly formatted, contains full host-specific paths to the resources and uses non-normalized base URI
273      * @throws Exception
274      */
275     public void testParseJettyWithNonNormalizedBaseURI()
276         throws Exception
277     {
278         List/*<String>*/links = parseLinks( "http://www.ibiblio.org/maven2/org/apache/maven/wagon//" target="alexandria_uri">http://www.ibiblio.org/maven2/org/apache/maven/wagon//",
279                                              "jetty-wagon.html" );
280 
281         String[] expected = new String[] {
282             "wagon-1.0-alpha-2.pom",
283             "wagon-1.0-alpha-2.pom.asc",
284             "wagon-1.0-alpha-2.pom.md5",
285             "wagon-1.0-alpha-2.pom.sha1",
286             "wagon-1.0-alpha-3-20050413.021234-4.pom",
287             "wagon-1.0-alpha-3-20050413.021234-4.pom.md5",
288             "wagon-1.0-alpha-3-20050413.021234-4.pom.sha1",
289             "wagon-1.0-alpha-3-20050419.043745-5.pom",
290             "wagon-1.0-alpha-3-20050419.043745-5.pom.md5",
291             "wagon-1.0-alpha-3-20050419.043745-5.pom.sha1",
292             "wagon-1.0-alpha-3-20050419.044035-6.pom",
293             "wagon-1.0-alpha-3-20050419.044035-6.pom.md5",
294             "wagon-1.0-alpha-3-20050419.044035-6.pom.sha1",
295             "wagon-1.0-alpha-3-20050421.162738-7.pom",
296             "wagon-1.0-alpha-3-20050421.162738-7.pom.md5",
297             "wagon-1.0-alpha-3-20050421.162738-7.pom.sha1",
298             "wagon-1.0-alpha-3-20050422.075233-8.pom",
299             "wagon-1.0-alpha-3-20050422.075233-8.pom.md5",
300             "wagon-1.0-alpha-3-20050422.075233-8.pom.sha1",
301             "wagon-1.0-alpha-3-20050429.051847-9.pom",
302             "wagon-1.0-alpha-3-20050429.051847-9.pom.md5",
303             "wagon-1.0-alpha-3-20050429.051847-9.pom.sha1",
304             "wagon-file/",
305             "wagon-ftp/",
306             "wagon-http-lightweight/",
307             "wagon-http/",
308             "wagon-lightweight-http/",
309             "wagon-provider-api/",
310             "wagon-provider-test/",
311             "wagon-provider/",
312             "wagon-providers-1.0-alpha-2.pom",
313             "wagon-providers-1.0-alpha-2.pom.asc",
314             "wagon-providers-1.0-alpha-2.pom.md5",
315             "wagon-providers-1.0-alpha-2.pom.sha1",
316             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom",
317             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.md5",
318             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.sha1",
319             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom",
320             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.md5",
321             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.sha1",
322             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom",
323             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.md5",
324             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.sha1",
325             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom",
326             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.md5",
327             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.sha1",
328             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom",
329             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.md5",
330             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.sha1",
331             "wagon-providers/",
332             "wagon-scm/",
333             "wagon-ssh-external/",
334             "wagon-ssh/",
335             "wagon-webdav/",
336             "wagon/" };
337 
338         assertContainsExpected( links, expected );
339 
340         String[] avoided = new String[] { "/org/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A" };
341 
342         assertNotContainingAvoided( links, avoided );
343     }
344 
345     /**
346      * Using repository.codehaus.org output as an example.
347      * This is an example of an older RHEL installation of apache httpd with old fancy indexing output
348      * This example tests how to detect directories properly.
349      * 
350      * @throws TransferFailedException
351      */
352     public void testParseMevenIde()
353         throws TransferFailedException
354     {
355         List/*<String>*/links = parseLinks( "http://repository.codehaus.org/org/codehaus/mevenide/" target="alexandria_uri">http://repository.codehaus.org/org/codehaus/mevenide/", "mevenide.html" );
356 
357         String[] expected = new String[] {
358             "apisupport/",
359             "autoupdate/",
360             "continuum-rpc/",
361             "continuum/",
362             "debugger-bridge/",
363             "deployment-bridge/",
364             "feature/",
365             "grammar/",
366             "ide-mojos/",
367             "indexer/",
368             "j2ee/",
369             "junit/",
370             "maven-metadata.xml",
371             "maven-metadata.xml.md5",
372             "maven-metadata.xml.sha1",
373             "mevenide2-parent/",
374             "nb-mvn-embedder/",
375             "nb-project/",
376             "nb-repo-browser/",
377             "netbeans-debugger-plugin/",
378             "netbeans-deploy-plugin/",
379             "netbeans-libs/",
380             "netbeans-nbmreload-plugin/",
381             "netbeans-repository/",
382             "netbeans-run-plugin/",
383             "netbeans/",
384             "persistence/",
385             "plugin-bridges/",
386             "plugins/",
387             "reload-nbm-bridge/",
388             "run-jar-bridge/" };
389 
390         assertContainsExpected( links, expected );
391 
392         String[] avoided = new String[] { "/org/codehaus/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A" };
393 
394         assertNotContainingAvoided( links, avoided );
395     }
396 
397     public void testParseMirror()
398         throws Exception
399     {
400         List/*<String>*/links = parseLinks( "http://www.ibiblio.org/maven2/org/apache/maven/wagon/" target="alexandria_uri">http://www.ibiblio.org/maven2/org/apache/maven/wagon/",
401                                              "mirror-wagon.html" );
402 
403         String[] expected = new String[] {
404             "wagon-1.0-alpha-2.pom",
405             "wagon-1.0-alpha-2.pom.asc",
406             "wagon-1.0-alpha-2.pom.md5",
407             "wagon-1.0-alpha-2.pom.sha1",
408             "wagon-1.0-alpha-3-20050413.021234-4.pom",
409             "wagon-1.0-alpha-3-20050413.021234-4.pom.md5",
410             "wagon-1.0-alpha-3-20050413.021234-4.pom.sha1",
411             "wagon-1.0-alpha-3-20050419.043745-5.pom",
412             "wagon-1.0-alpha-3-20050419.043745-5.pom.md5",
413             "wagon-1.0-alpha-3-20050419.043745-5.pom.sha1",
414             "wagon-1.0-alpha-3-20050419.044035-6.pom",
415             "wagon-1.0-alpha-3-20050419.044035-6.pom.md5",
416             "wagon-1.0-alpha-3-20050419.044035-6.pom.sha1",
417             "wagon-1.0-alpha-3-20050421.162738-7.pom",
418             "wagon-1.0-alpha-3-20050421.162738-7.pom.md5",
419             "wagon-1.0-alpha-3-20050421.162738-7.pom.sha1",
420             "wagon-1.0-alpha-3-20050422.075233-8.pom",
421             "wagon-1.0-alpha-3-20050422.075233-8.pom.md5",
422             "wagon-1.0-alpha-3-20050422.075233-8.pom.sha1",
423             "wagon-1.0-alpha-3-20050429.051847-9.pom",
424             "wagon-1.0-alpha-3-20050429.051847-9.pom.md5",
425             "wagon-1.0-alpha-3-20050429.051847-9.pom.sha1",
426             "wagon-file/",
427             "wagon-ftp/",
428             "wagon-http-lightweight/",
429             "wagon-http/",
430             "wagon-lightweight-http/",
431             "wagon-provider-api/",
432             "wagon-provider-test/",
433             "wagon-provider/",
434             "wagon-providers-1.0-alpha-2.pom",
435             "wagon-providers-1.0-alpha-2.pom.asc",
436             "wagon-providers-1.0-alpha-2.pom.md5",
437             "wagon-providers-1.0-alpha-2.pom.sha1",
438             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom",
439             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.md5",
440             "wagon-providers-1.0-alpha-3-20050407.202848-1.pom.sha1",
441             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom",
442             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.md5",
443             "wagon-providers-1.0-alpha-3-20050419.044035-2.pom.sha1",
444             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom",
445             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.md5",
446             "wagon-providers-1.0-alpha-3-20050421.162738-3.pom.sha1",
447             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom",
448             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.md5",
449             "wagon-providers-1.0-alpha-3-20050422.075233-4.pom.sha1",
450             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom",
451             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.md5",
452             "wagon-providers-1.0-alpha-3-20050429.051847-5.pom.sha1",
453             "wagon-providers/",
454             "wagon-scm/",
455             "wagon-ssh-external/",
456             "wagon-ssh/",
457             "wagon-webdav/",
458             "wagon/" };
459 
460         assertContainsExpected( links, expected );
461 
462         String[] avoided = new String[] {
463             "/org/codehaus/",
464             "?C=S;O=A",
465             "?C=D;O=A",
466             "?C=M;O=A",
467             "mailto:mirror.admin@mirror.com" };
468 
469         assertNotContainingAvoided( links, avoided );
470     }
471 
472     /**
473      * Example of output from repo1.maven.org
474      * This example is of nekohtml specifically.
475      * 
476      * @throws TransferFailedException
477      */
478     public void testParseNekoHtml()
479         throws TransferFailedException
480     {
481         List/*<String>*/links = parseLinks( "http://repo1.maven.org//maven2/nekohtml/nekohtml/1.9.6/" target="alexandria_uri">http://repo1.maven.org//maven2/nekohtml/nekohtml/1.9.6/", "nekohtml.html" );
482 
483         String[] expected = new String[] {
484             "nekohtml-1.9.6-javadoc.jar",
485             "nekohtml-1.9.6-javadoc.jar.md5",
486             "nekohtml-1.9.6-javadoc.jar.sha1",
487             "nekohtml-1.9.6-sources.jar",
488             "nekohtml-1.9.6-sources.jar.md5",
489             "nekohtml-1.9.6-sources.jar.sha1",
490             "nekohtml-1.9.6.jar",
491             "nekohtml-1.9.6.jar.md5",
492             "nekohtml-1.9.6.jar.sha1",
493             "nekohtml-1.9.6.pom",
494             "nekohtml-1.9.6.pom.md5",
495             "nekohtml-1.9.6.pom.sha1" };
496 
497         assertContainsExpected( links, expected );
498 
499         String[] avoided = new String[] { "/maven2/nekohtml/nekohtml/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A" };
500 
501         assertNotContainingAvoided( links, avoided );
502     }
503 
504     /**
505      * Example of detecting directories on repo1.maven.org
506      * 
507      * @throws TransferFailedException
508      */
509     public void testParseNetSourceforge()
510         throws TransferFailedException
511     {
512         List/*<String>*/links = parseLinks( "http://repo1.maven.org/maven2/net/sf/" target="alexandria_uri">http://repo1.maven.org/maven2/net/sf/", "net_sf.html" );
513 
514         String[] expected = new String[] {
515             "a2j/",
516             "aislib/",
517             "alchim/",
518             "antenna/",
519             "apt-jelly/",
520             "beanlib/",
521             "bluecove/",
522             "buildbox/",
523             "click/",
524             "clirr/",
525             "datavision/",
526             "dozer/",
527             "dtddoc/",
528             "dynpageplus/",
529             "ehcache/",
530             "ezmorph/",
531             "falcon/",
532             "grester/",
533             "gwt-widget/",
534             "hermesftp/",
535             "hibernate/",
536             "jcharts/",
537             "jdatabaseimport/",
538             "jeceira/",
539             "jfcunit/",
540             "jfig/",
541             "jguard/",
542             "jipcam/",
543             "jlynx/",
544             "jour/",
545             "jpf/",
546             "json-lib/",
547             "jsptest/",
548             "jsr107cache/",
549             "jt400/",
550             "jxls/",
551             "kxml/",
552             "ldaptemplate/",
553             "locale4j/",
554             "mapasuta/",
555             "maven-har/",
556             "maven-sar/",
557             "opencsv/",
558             "oval/",
559             "proguard/",
560             "qdwizard/",
561             "resultsetmapper/",
562             "retrotranslator/",
563             "saxon/",
564             "shadesdb/",
565             "smc/",
566             "speculoos/",
567             "springlayout/",
568             "stat-scm/",
569             "statsvn/",
570             "stax/",
571             "struts/",
572             "tacos/",
573             "testextensions/",
574             "webdav-servlet/" };
575 
576         assertContainsExpected( links, expected );
577 
578         String[] avoided = new String[] { "/maven2/net/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A" };
579 
580         assertNotContainingAvoided( links, avoided );
581     }
582 
583     /**
584      * Another larger example of the directory link detection on repository.codehaus.org
585      * 
586      * @throws TransferFailedException
587      */
588     public void testParseOrgCodehaus()
589         throws TransferFailedException
590     {
591         List/*<String>*/links = parseLinks( "http://repository.codehaus.org/org/codehaus" target="alexandria_uri">http://repository.codehaus.org/org/codehaus", "org.codehaus.html" );
592 
593         String[] expected = new String[] {
594             "agilifier/",
595             "benji/",
596             "bruce/",
597             "btm/",
598             "cargo/",
599             "castor-spring/",
600             "castor/",
601             "cozmos/",
602             "dataforge/",
603             "dimple/",
604             "droolsdotnet/",
605             "enunciate/",
606             "fabric3/",
607             "gant/",
608             "grails-plugins/",
609             "groovy/",
610             "gsoc/",
611             "guessencoding/",
612             "gumtree/",
613             "gwt-openlayers/",
614             "haus/",
615             "izpack/",
616             "javasim/",
617             "jedi/",
618             "jequel/",
619             "jet/",
620             "jettison/",
621             "jfdi/",
622             "jikesrvm/",
623             "jra/",
624             "jremoting/",
625             "jtestme/",
626             "jtestr/",
627             "labs-ng/",
628             "logicabyss/",
629             "marionette/",
630             "mevenide/",
631             "modello/",
632             "mojo/",
633             "mvel/",
634             "mvflex/",
635             "native-mojo/",
636             "openim/",
637             "plexus/",
638             "polymap/",
639             "prometheus/",
640             "prophit/",
641             "quaere/",
642             "redback/",
643             "rulessandpit/",
644             "rvm/",
645             "savana/",
646             "scala-ide/",
647             "senro/",
648             "sonar/",
649             "staxmate/",
650             "stomp/",
651             "svn4j/",
652             "swiby/",
653             "swizzle/",
654             "sxc/",
655             "testdox/",
656             "wadi/",
657             "waffle/",
658             "woodstox/",
659             "xdoclet/",
660             "xfire/",
661             "xharness/",
662             "xsite/",
663             "xstream/",
664             "xwire/" };
665 
666         assertContainsExpected( links, expected );
667 
668         String[] avoided = new String[] { "/org/", "?C=S;O=A", "?C=D;O=A", "?C=M;O=A" };
669 
670         assertNotContainingAvoided( links, avoided );
671     }
672 
673     /**
674      * Test the output found from apache httpd with fancy indexing and dav module.
675      * Using people.apache.org output as source material.
676      * 
677      * @throws TransferFailedException
678      */
679     public void testParsePeopleApacheOrg()
680         throws TransferFailedException
681     {
682         List/*<String>*/links = parseLinks(
683                                              "http://people.apache.org/repo/m2-ibiblio-rsync-repository/org/apache/maven/archiva/archiva-plexus-runtime/1.0.1/",
684                                              "org.apache.maven.html" );
685 
686         String[] expected = new String[] {
687             "archiva-plexus-runtime-1.0.1-bin.tar.gz",
688             "archiva-plexus-runtime-1.0.1-bin.tar.gz.asc",
689             "archiva-plexus-runtime-1.0.1-bin.tar.gz.asc.md5",
690             "archiva-plexus-runtime-1.0.1-bin.tar.gz.asc.sha1",
691             "archiva-plexus-runtime-1.0.1-bin.tar.gz.md5",
692             "archiva-plexus-runtime-1.0.1-bin.tar.gz.sha1",
693             "archiva-plexus-runtime-1.0.1-bin.zip",
694             "archiva-plexus-runtime-1.0.1-bin.zip.asc",
695             "archiva-plexus-runtime-1.0.1-bin.zip.asc.md5",
696             "archiva-plexus-runtime-1.0.1-bin.zip.asc.sha1",
697             "archiva-plexus-runtime-1.0.1-bin.zip.md5",
698             "archiva-plexus-runtime-1.0.1-bin.zip.sha1",
699             "archiva-plexus-runtime-1.0.1-sources.jar",
700             "archiva-plexus-runtime-1.0.1-sources.jar.asc",
701             "archiva-plexus-runtime-1.0.1-sources.jar.asc.md5",
702             "archiva-plexus-runtime-1.0.1-sources.jar.asc.sha1",
703             "archiva-plexus-runtime-1.0.1-sources.jar.md5",
704             "archiva-plexus-runtime-1.0.1-sources.jar.sha1",
705             "archiva-plexus-runtime-1.0.1.jar",
706             "archiva-plexus-runtime-1.0.1.jar.asc",
707             "archiva-plexus-runtime-1.0.1.jar.asc.md5",
708             "archiva-plexus-runtime-1.0.1.jar.asc.sha1",
709             "archiva-plexus-runtime-1.0.1.jar.md5",
710             "archiva-plexus-runtime-1.0.1.jar.sha1",
711             "archiva-plexus-runtime-1.0.1.pom",
712             "archiva-plexus-runtime-1.0.1.pom.asc",
713             "archiva-plexus-runtime-1.0.1.pom.asc.md5",
714             "archiva-plexus-runtime-1.0.1.pom.asc.sha1",
715             "archiva-plexus-runtime-1.0.1.pom.md5",
716             "archiva-plexus-runtime-1.0.1.pom.sha1",
717             "readme artifacts.txt"};
718 
719         assertContainsExpected( links, expected );
720 
721         String[] avoided = new String[] {
722             "/repo/m2-ibiblio-rsync-repository/org/apache/maven/archiva/archiva-plexus-runtime/",
723             "?C=S;O=A",
724             "?C=D;O=A",
725             "?C=M;O=A" };
726 
727         assertNotContainingAvoided( links, avoided );
728     }
729 }