Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

Maven2RepositoryMetadataResolverTest.java 39KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814
  1. package org.apache.archiva.repository.maven.metadata.storage;
  2. /*
  3. * Licensed to the Apache Software Foundation (ASF) under one
  4. * or more contributor license agreements. See the NOTICE file
  5. * distributed with this work for additional information
  6. * regarding copyright ownership. The ASF licenses this file
  7. * to you under the Apache License, Version 2.0 (the
  8. * "License"); you may not use this file except in compliance
  9. * with the License. You may obtain a copy of the License at
  10. *
  11. * http://www.apache.org/licenses/LICENSE-2.0
  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. import junit.framework.TestCase;
  20. import org.apache.archiva.configuration.ArchivaConfiguration;
  21. import org.apache.archiva.configuration.Configuration;
  22. import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
  23. import org.apache.archiva.configuration.ProxyConnectorConfiguration;
  24. import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
  25. import org.apache.archiva.configuration.RepositoryScanningConfiguration;
  26. import org.apache.archiva.filter.AllFilter;
  27. import org.apache.archiva.filter.ExcludesFilter;
  28. import org.apache.archiva.filter.Filter;
  29. import org.apache.archiva.metadata.maven.model.MavenArtifactFacet;
  30. import org.apache.archiva.metadata.model.ArtifactMetadata;
  31. import org.apache.archiva.metadata.model.Dependency;
  32. import org.apache.archiva.metadata.model.License;
  33. import org.apache.archiva.metadata.model.MailingList;
  34. import org.apache.archiva.metadata.model.ProjectVersionMetadata;
  35. import org.apache.archiva.metadata.repository.storage.ReadMetadataRequest;
  36. import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataInvalidException;
  37. import org.apache.archiva.metadata.repository.storage.RepositoryStorageMetadataNotFoundException;
  38. import org.apache.archiva.proxy.maven.WagonFactory;
  39. import org.apache.archiva.proxy.maven.WagonFactoryRequest;
  40. import org.apache.archiva.repository.RepositoryRegistry;
  41. import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
  42. import org.apache.commons.io.FileUtils;
  43. import org.apache.maven.wagon.Wagon;
  44. import org.junit.Before;
  45. import org.junit.Test;
  46. import org.junit.runner.RunWith;
  47. import org.springframework.test.context.ContextConfiguration;
  48. import javax.inject.Inject;
  49. import javax.inject.Named;
  50. import java.io.IOException;
  51. import java.net.URL;
  52. import java.nio.file.Files;
  53. import java.nio.file.Path;
  54. import java.nio.file.Paths;
  55. import java.nio.file.StandardCopyOption;
  56. import java.util.ArrayList;
  57. import java.util.Arrays;
  58. import java.util.Collection;
  59. import java.util.Collections;
  60. import java.util.Comparator;
  61. import java.util.List;
  62. import static org.mockito.Mockito.mock;
  63. import static org.mockito.Mockito.when;
  64. @RunWith ( ArchivaSpringJUnit4ClassRunner.class )
  65. @ContextConfiguration ( { "classpath*:/META-INF/spring-context.xml", "classpath:/spring-context.xml" } )
  66. public class Maven2RepositoryMetadataResolverTest
  67. extends TestCase
  68. {
  69. private static final Filter<String> ALL = new AllFilter<String>();
  70. @Inject
  71. @Named ( "repositoryStorage#maven2" )
  72. private Maven2RepositoryStorage storage;
  73. @Inject
  74. RepositoryRegistry repositoryRegistry;
  75. private static final String TEST_REPO_ID = "test";
  76. private static final String TEST_REMOTE_REPO_ID = "central";
  77. private static final String ASF_SCM_CONN_BASE = "scm:svn:http://svn.apache.org/repos/asf/";
  78. private static final String ASF_SCM_DEV_CONN_BASE = "scm:svn:https://svn.apache.org/repos/asf/";
  79. private static final String ASF_SCM_VIEWVC_BASE = "http://svn.apache.org/viewvc/";
  80. private static final String TEST_SCM_CONN_BASE = "scm:svn:http://svn.example.com/repos/";
  81. private static final String TEST_SCM_DEV_CONN_BASE = "scm:svn:https://svn.example.com/repos/";
  82. private static final String TEST_SCM_URL_BASE = "http://svn.example.com/repos/";
  83. private static final String EMPTY_MD5 = "d41d8cd98f00b204e9800998ecf8427e";
  84. private static final String EMPTY_SHA1 = "da39a3ee5e6b4b0d3255bfef95601890afd80709";
  85. @Inject
  86. @Named ( "archivaConfiguration#default" )
  87. protected ArchivaConfiguration configuration;
  88. private WagonFactory wagonFactory;
  89. ManagedRepositoryConfiguration testRepo;
  90. Configuration c;
  91. @Before
  92. @Override
  93. public void setUp()
  94. throws Exception
  95. {
  96. super.setUp();
  97. c = new Configuration();
  98. c.setVersion("2.0");
  99. testRepo = new ManagedRepositoryConfiguration();
  100. testRepo.setId( TEST_REPO_ID );
  101. testRepo.setLocation( Paths.get( "target/test-repository" ).toAbsolutePath().toString() );
  102. testRepo.setReleases( true );
  103. testRepo.setSnapshots( true );
  104. c.addManagedRepository( testRepo );
  105. RemoteRepositoryConfiguration testRemoteRepo = new RemoteRepositoryConfiguration();
  106. testRemoteRepo.setId( TEST_REMOTE_REPO_ID );
  107. testRemoteRepo.setLayout( "default" );
  108. testRemoteRepo.setName( "Central Repository" );
  109. testRemoteRepo.setUrl( "http://central.repo.com/maven2" );
  110. testRemoteRepo.setTimeout( 10 );
  111. c.addRemoteRepository( testRemoteRepo );
  112. ProxyConnectorConfiguration proxyConnector = new ProxyConnectorConfiguration();
  113. proxyConnector.setSourceRepoId( TEST_REPO_ID );
  114. proxyConnector.setTargetRepoId( TEST_REMOTE_REPO_ID );
  115. proxyConnector.setDisabled( false );
  116. c.addProxyConnector( proxyConnector );
  117. RepositoryScanningConfiguration scCfg = new RepositoryScanningConfiguration();
  118. c.setRepositoryScanning(scCfg);
  119. configuration.save( c );
  120. assertFalse(configuration.isDefaulted());
  121. repositoryRegistry.reload();
  122. assertTrue( c.getManagedRepositories().get( 0 ).isSnapshots() );
  123. assertTrue( c.getManagedRepositories().get( 0 ).isReleases() );
  124. wagonFactory = mock( WagonFactory.class );
  125. storage.setWagonFactory( wagonFactory );
  126. Wagon wagon = new MockWagon();
  127. when( wagonFactory.getWagon( new WagonFactoryRequest().protocol( "wagon#http" ) ) ).thenReturn( wagon );
  128. }
  129. @Test
  130. public void testModelWithJdkProfileActivation()
  131. throws Exception
  132. {
  133. ReadMetadataRequest readMetadataRequest =
  134. new ReadMetadataRequest().repositoryId( TEST_REPO_ID ).namespace( "org.apache.maven" ).projectId(
  135. "maven-archiver" ).projectVersion( "2.4.1" );
  136. ProjectVersionMetadata metadata = storage.readProjectVersionMetadata( readMetadataRequest );
  137. MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
  138. }
  139. @Test
  140. public void testGetProjectVersionMetadata()
  141. throws Exception
  142. {
  143. ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
  144. new ReadMetadataRequest( TEST_REPO_ID, "org.apache.archiva", "archiva-common", "1.2.1" ) );
  145. MavenProjectFacet facet = (MavenProjectFacet) metadata.getFacet( MavenProjectFacet.FACET_ID );
  146. assertEquals( "jar", facet.getPackaging() );
  147. assertEquals( "http://archiva.apache.org/ref/1.2.1/archiva-base/archiva-common", metadata.getUrl() );
  148. assertEquals( "org.apache.archiva", facet.getParent().getGroupId() );
  149. assertEquals( "archiva-base", facet.getParent().getArtifactId() );
  150. assertEquals( "1.2.1", facet.getParent().getVersion() );
  151. assertEquals( "archiva-common", facet.getArtifactId() );
  152. assertEquals( "org.apache.archiva", facet.getGroupId() );
  153. assertEquals( "continuum", metadata.getCiManagement().getSystem() );
  154. assertEquals( "http://vmbuild.apache.org/continuum", metadata.getCiManagement().getUrl() );
  155. assertNotNull( metadata.getDescription() );
  156. // TODO: this would be better
  157. // assertEquals(
  158. // "Archiva is an application for managing one or more remote repositories, including administration, artifact handling, browsing and searching.",
  159. // metadata.getDescription() );
  160. assertEquals( "1.2.1", metadata.getId() );
  161. assertEquals( "jira", metadata.getIssueManagement().getSystem() );
  162. assertEquals( "http://jira.codehaus.org/browse/MRM", metadata.getIssueManagement().getUrl() );
  163. checkApacheLicense( metadata );
  164. assertEquals( "Archiva Base :: Common", metadata.getName() );
  165. String path = "archiva/tags/archiva-1.2.1/archiva-modules/archiva-base/archiva-common";
  166. assertEquals( ASF_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
  167. assertEquals( ASF_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
  168. assertEquals( ASF_SCM_VIEWVC_BASE + path, metadata.getScm().getUrl() );
  169. checkOrganizationApache( metadata );
  170. assertEquals( 4, metadata.getMailingLists().size() );
  171. assertMailingList( "users", metadata.getMailingLists().get( 0 ), "Archiva User List", true,
  172. "http://www.nabble.com/archiva-users-f16426.html" );
  173. assertMailingList( "dev", metadata.getMailingLists().get( 1 ), "Archiva Developer List", true,
  174. "http://www.nabble.com/archiva-dev-f16427.html" );
  175. assertMailingList( "commits", metadata.getMailingLists().get( 2 ), "Archiva Commits List", false, null );
  176. assertMailingList( "issues", metadata.getMailingLists().get( 3 ), "Archiva Issues List", false,
  177. "http://www.nabble.com/Archiva---Issues-f29617.html" );
  178. List<Dependency> dependencies = metadata.getDependencies();
  179. assertEquals( 10, dependencies.size() );
  180. assertDependency( dependencies.get( 0 ), "commons-lang", "commons-lang", "2.2" );
  181. assertDependency( dependencies.get( 1 ), "commons-io", "commons-io", "1.4" );
  182. assertDependency( dependencies.get( 2 ), "org.slf4j", "slf4j-api", "1.5.0" );
  183. assertDependency( dependencies.get( 3 ), "org.codehaus.plexus", "plexus-component-api", "1.0-alpha-22" );
  184. assertDependency( dependencies.get( 4 ), "org.codehaus.plexus", "plexus-spring", "1.2", "test" );
  185. assertDependency( dependencies.get( 5 ), "xalan", "xalan", "2.7.0" );
  186. assertDependency( dependencies.get( 6 ), "dom4j", "dom4j", "1.6.1", "test" );
  187. assertDependency( dependencies.get( 7 ), "junit", "junit", "3.8.1", "test" );
  188. assertDependency( dependencies.get( 8 ), "easymock", "easymock", "1.2_Java1.3", "test" );
  189. assertDependency( dependencies.get( 9 ), "easymock", "easymockclassextension", "1.2", "test" );
  190. assertEquals( 8, metadata.getProperties().size() );
  191. assertEquals( "http://www.apache.org/images/asf_logo_wide.gif", metadata.getProperties().get("organization.logo") );
  192. }
  193. @Test
  194. public void testGetArtifactMetadata()
  195. throws Exception
  196. {
  197. Collection<ArtifactMetadata> springArtifacts = storage.readArtifactsMetadata(
  198. new ReadMetadataRequest( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", ALL ) );
  199. List<ArtifactMetadata> artifacts = new ArrayList<>( springArtifacts );
  200. Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
  201. {
  202. @Override
  203. public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
  204. {
  205. return o1.getId().compareTo( o2.getId() );
  206. }
  207. } );
  208. assertEquals( 3, artifacts.size() );
  209. ArtifactMetadata artifactMetadata = artifacts.get( 0 );
  210. assertEquals( "plexus-spring-1.2-sources.jar", artifactMetadata.getId() );
  211. MavenArtifactFacet facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  212. assertEquals( 0, facet.getBuildNumber() );
  213. assertNull( facet.getTimestamp() );
  214. assertEquals( "sources", facet.getClassifier() );
  215. assertEquals( "java-source", facet.getType() );
  216. artifactMetadata = artifacts.get( 1 );
  217. assertEquals( "plexus-spring-1.2.jar", artifactMetadata.getId() );
  218. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  219. assertEquals( 0, facet.getBuildNumber() );
  220. assertNull( facet.getTimestamp() );
  221. assertNull( facet.getClassifier() );
  222. assertEquals( "jar", facet.getType() );
  223. artifactMetadata = artifacts.get( 2 );
  224. assertEquals( "plexus-spring-1.2.pom", artifactMetadata.getId() );
  225. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  226. assertEquals( 0, facet.getBuildNumber() );
  227. assertNull( facet.getTimestamp() );
  228. assertNull( facet.getClassifier() );
  229. assertEquals( "pom", facet.getType() );
  230. }
  231. @Test
  232. public void testGetArtifactMetadataSnapshots()
  233. throws Exception
  234. {
  235. Collection<ArtifactMetadata> testArtifacts = storage.readArtifactsMetadata(
  236. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "test-artifact", "1.0-SNAPSHOT", ALL ) );
  237. List<ArtifactMetadata> artifacts = new ArrayList<>( testArtifacts );
  238. Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
  239. {
  240. @Override
  241. public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
  242. {
  243. return o1.getId().compareTo( o2.getId() );
  244. }
  245. } );
  246. assertEquals( 6, artifacts.size() );
  247. ArtifactMetadata artifactMetadata = artifacts.get( 0 );
  248. assertEquals( "test-artifact-1.0-20100308.230825-1.jar", artifactMetadata.getId() );
  249. MavenArtifactFacet facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  250. assertEquals( 1, facet.getBuildNumber() );
  251. assertEquals( "20100308.230825", facet.getTimestamp() );
  252. assertNull( facet.getClassifier() );
  253. assertEquals( "jar", facet.getType() );
  254. artifactMetadata = artifacts.get( 1 );
  255. assertEquals( "test-artifact-1.0-20100308.230825-1.pom", artifactMetadata.getId() );
  256. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  257. assertEquals( 1, facet.getBuildNumber() );
  258. assertEquals( "20100308.230825", facet.getTimestamp() );
  259. assertNull( facet.getClassifier() );
  260. assertEquals( "pom", facet.getType() );
  261. artifactMetadata = artifacts.get( 2 );
  262. assertEquals( "test-artifact-1.0-20100310.014828-2-javadoc.jar", artifactMetadata.getId() );
  263. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  264. assertEquals( 2, facet.getBuildNumber() );
  265. assertEquals( "20100310.014828", facet.getTimestamp() );
  266. assertEquals( "javadoc", facet.getClassifier() );
  267. assertEquals( "javadoc", facet.getType() );
  268. artifactMetadata = artifacts.get( 3 );
  269. assertEquals( "test-artifact-1.0-20100310.014828-2-sources.jar", artifactMetadata.getId() );
  270. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  271. assertEquals( 2, facet.getBuildNumber() );
  272. assertEquals( "20100310.014828", facet.getTimestamp() );
  273. assertEquals( "sources", facet.getClassifier() );
  274. assertEquals( "java-source", facet.getType() );
  275. artifactMetadata = artifacts.get( 4 );
  276. assertEquals( "test-artifact-1.0-20100310.014828-2.jar", artifactMetadata.getId() );
  277. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  278. assertEquals( 2, facet.getBuildNumber() );
  279. assertEquals( "20100310.014828", facet.getTimestamp() );
  280. assertNull( facet.getClassifier() );
  281. assertEquals( "jar", facet.getType() );
  282. artifactMetadata = artifacts.get( 5 );
  283. assertEquals( "test-artifact-1.0-20100310.014828-2.pom", artifactMetadata.getId() );
  284. facet = (MavenArtifactFacet) artifactMetadata.getFacet( MavenArtifactFacet.FACET_ID );
  285. assertEquals( 2, facet.getBuildNumber() );
  286. assertEquals( "20100310.014828", facet.getTimestamp() );
  287. assertNull( facet.getClassifier() );
  288. assertEquals( "pom", facet.getType() );
  289. }
  290. @Test
  291. public void testGetArtifactMetadataSnapshotsMRM1859()
  292. throws Exception
  293. {
  294. Path repoDir = Paths.get("target/test-repository/com/example/test/test-artifact/1.0-SNAPSHOT");
  295. URL url = Thread.currentThread().getContextClassLoader().getResource("resolver-status.properties");
  296. Path resFile = Paths.get(url.toURI());
  297. Path destFile = repoDir.resolve(resFile.getFileName());
  298. Files.copy(resFile, destFile, StandardCopyOption.REPLACE_EXISTING);
  299. URL url2 = Thread.currentThread().getContextClassLoader().getResource("test01.properties");
  300. Path resFile2 = Paths.get(url2.toURI());
  301. Path destFile2 = repoDir.resolve(resFile2.getFileName());
  302. Files.copy(resFile2, destFile2, StandardCopyOption.REPLACE_EXISTING);
  303. try {
  304. Collection<ArtifactMetadata> testArtifacts = storage.readArtifactsMetadata(
  305. new ReadMetadataRequest(TEST_REPO_ID, "com.example.test", "test-artifact", "1.0-SNAPSHOT", ALL));
  306. List<ArtifactMetadata> artifacts = new ArrayList<>(testArtifacts);
  307. Collections.sort(artifacts, new Comparator<ArtifactMetadata>() {
  308. @Override
  309. public int compare(ArtifactMetadata o1, ArtifactMetadata o2) {
  310. return o1.getId().compareTo(o2.getId());
  311. }
  312. });
  313. assertEquals(6, artifacts.size());
  314. ArtifactMetadata artifactMetadata = artifacts.get(0);
  315. assertEquals("test-artifact-1.0-20100308.230825-1.jar", artifactMetadata.getId());
  316. MavenArtifactFacet facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
  317. assertEquals(1, facet.getBuildNumber());
  318. assertEquals("20100308.230825", facet.getTimestamp());
  319. assertNull(facet.getClassifier());
  320. assertEquals("jar", facet.getType());
  321. artifactMetadata = artifacts.get(1);
  322. assertEquals("test-artifact-1.0-20100308.230825-1.pom", artifactMetadata.getId());
  323. facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
  324. assertEquals(1, facet.getBuildNumber());
  325. assertEquals("20100308.230825", facet.getTimestamp());
  326. assertNull(facet.getClassifier());
  327. assertEquals("pom", facet.getType());
  328. artifactMetadata = artifacts.get(2);
  329. assertEquals("test-artifact-1.0-20100310.014828-2-javadoc.jar", artifactMetadata.getId());
  330. facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
  331. assertEquals(2, facet.getBuildNumber());
  332. assertEquals("20100310.014828", facet.getTimestamp());
  333. assertEquals("javadoc", facet.getClassifier());
  334. assertEquals("javadoc", facet.getType());
  335. artifactMetadata = artifacts.get(3);
  336. assertEquals("test-artifact-1.0-20100310.014828-2-sources.jar", artifactMetadata.getId());
  337. facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
  338. assertEquals(2, facet.getBuildNumber());
  339. assertEquals("20100310.014828", facet.getTimestamp());
  340. assertEquals("sources", facet.getClassifier());
  341. assertEquals("java-source", facet.getType());
  342. artifactMetadata = artifacts.get(4);
  343. assertEquals("test-artifact-1.0-20100310.014828-2.jar", artifactMetadata.getId());
  344. facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
  345. assertEquals(2, facet.getBuildNumber());
  346. assertEquals("20100310.014828", facet.getTimestamp());
  347. assertNull(facet.getClassifier());
  348. assertEquals("jar", facet.getType());
  349. artifactMetadata = artifacts.get(5);
  350. assertEquals("test-artifact-1.0-20100310.014828-2.pom", artifactMetadata.getId());
  351. facet = (MavenArtifactFacet) artifactMetadata.getFacet(MavenArtifactFacet.FACET_ID);
  352. assertEquals(2, facet.getBuildNumber());
  353. assertEquals("20100310.014828", facet.getTimestamp());
  354. assertNull(facet.getClassifier());
  355. assertEquals("pom", facet.getType());
  356. } finally {
  357. Files.delete(destFile);
  358. Files.delete(destFile2);
  359. }
  360. }
  361. private void assertDependency( Dependency dependency, String groupId, String artifactId, String version )
  362. {
  363. assertDependency( dependency, groupId, artifactId, version, "compile" );
  364. }
  365. private void assertDependency( Dependency dependency, String groupId, String artifactId, String version,
  366. String scope )
  367. {
  368. assertEquals( artifactId, dependency.getArtifactId() );
  369. assertEquals( "jar", dependency.getType() );
  370. assertEquals( version, dependency.getVersion() );
  371. assertEquals( groupId, dependency.getNamespace() );
  372. assertEquals( scope, dependency.getScope() );
  373. assertNull( dependency.getClassifier() );
  374. assertNull( dependency.getSystemPath() );
  375. }
  376. @Test
  377. public void testGetProjectVersionMetadataForTimestampedSnapshot()
  378. throws Exception
  379. {
  380. ProjectVersionMetadata metadata = storage.readProjectVersionMetadata(
  381. new ReadMetadataRequest( TEST_REPO_ID, "org.apache", "apache", "5-SNAPSHOT" ) );
  382. MavenProjectFacet facet = MavenProjectFacet.class.cast( metadata.getFacet( MavenProjectFacet.FACET_ID ) );
  383. assertEquals( "pom", facet.getPackaging() );
  384. assertEquals( "http://www.apache.org/", metadata.getUrl() );
  385. assertNull( facet.getParent() );
  386. assertEquals( "org.apache", facet.getGroupId() );
  387. assertEquals( "apache", facet.getArtifactId() );
  388. assertNull( metadata.getCiManagement() );
  389. assertNotNull( metadata.getDescription() );
  390. // TODO: this would be better
  391. // assertEquals(
  392. // "The Apache Software Foundation provides support for the Apache community of open-source software projects. " +
  393. // "The Apache projects are characterized by a collaborative, consensus based development process, an open " +
  394. // "and pragmatic software license, and a desire to create high quality software that leads the way in its " +
  395. // "field. We consider ourselves not simply a group of projects sharing a server, but rather a community of " +
  396. // "developers and users.", metadata.getDescription() );
  397. assertEquals( "5-SNAPSHOT", metadata.getId() );
  398. assertNull( metadata.getIssueManagement() );
  399. checkApacheLicense( metadata );
  400. assertEquals( "The Apache Software Foundation", metadata.getName() );
  401. String path = "maven/pom/trunk/asf";
  402. assertEquals( ASF_SCM_CONN_BASE + path, metadata.getScm().getConnection() );
  403. assertEquals( ASF_SCM_DEV_CONN_BASE + path, metadata.getScm().getDeveloperConnection() );
  404. assertEquals( ASF_SCM_VIEWVC_BASE + path, metadata.getScm().getUrl() );
  405. checkOrganizationApache( metadata );
  406. assertEquals( 1, metadata.getMailingLists().size() );
  407. assertMailingList( metadata.getMailingLists().get( 0 ), "Apache Announce List",
  408. "http://mail-archives.apache.org/mod_mbox/www-announce/", "announce@apache.org",
  409. "announce-subscribe@apache.org", "announce-unsubscribe@apache.org",
  410. Collections.<String>emptyList(), true );
  411. assertEquals( Collections.<Dependency>emptyList(), metadata.getDependencies() );
  412. }
  413. @Test
  414. public void testGetProjectVersionMetadataForTimestampedSnapshotMissingMetadata()
  415. throws Exception
  416. {
  417. try
  418. {
  419. storage.readProjectVersionMetadata(
  420. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT" ) );
  421. fail( "Should not be found" );
  422. }
  423. catch ( RepositoryStorageMetadataNotFoundException e )
  424. {
  425. assertEquals( "missing-pom", e.getId() );
  426. }
  427. }
  428. @Test
  429. public void testGetProjectVersionMetadataForTimestampedSnapshotMalformedMetadata()
  430. throws Exception
  431. {
  432. try
  433. {
  434. storage.readProjectVersionMetadata(
  435. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "malformed-metadata", "1.0-SNAPSHOT" ) );
  436. fail( "Should not be found" );
  437. }
  438. catch ( RepositoryStorageMetadataNotFoundException e )
  439. {
  440. assertEquals( "missing-pom", e.getId() );
  441. }
  442. }
  443. @Test
  444. public void testGetProjectVersionMetadataForTimestampedSnapshotIncompleteMetadata()
  445. throws Exception
  446. {
  447. try
  448. {
  449. storage.readProjectVersionMetadata(
  450. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "incomplete-metadata", "1.0-SNAPSHOT" ) );
  451. fail( "Should not be found" );
  452. }
  453. catch ( RepositoryStorageMetadataNotFoundException e )
  454. {
  455. assertEquals( "missing-pom", e.getId() );
  456. }
  457. }
  458. @Test
  459. public void testGetProjectVersionMetadataForInvalidPom()
  460. throws Exception
  461. {
  462. try
  463. {
  464. storage.readProjectVersionMetadata(
  465. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "invalid-pom", "1.0" ) );
  466. fail( "Should have received an exception due to invalid POM" );
  467. }
  468. catch ( RepositoryStorageMetadataInvalidException e )
  469. {
  470. assertEquals( "invalid-pom", e.getId() );
  471. }
  472. }
  473. @Test
  474. public void testGetProjectVersionMetadataForMislocatedPom()
  475. throws Exception
  476. {
  477. try
  478. {
  479. storage.readProjectVersionMetadata(
  480. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "mislocated-pom", "1.0" ) );
  481. fail( "Should have received an exception due to mislocated POM" );
  482. }
  483. catch ( RepositoryStorageMetadataInvalidException e )
  484. {
  485. assertEquals( "mislocated-pom", e.getId() );
  486. }
  487. }
  488. @Test
  489. public void testGetProjectVersionMetadataForMissingPom()
  490. throws Exception
  491. {
  492. try
  493. {
  494. storage.readProjectVersionMetadata(
  495. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-pom", "1.0" ) );
  496. fail( "Should not be found" );
  497. }
  498. catch ( RepositoryStorageMetadataNotFoundException e )
  499. {
  500. assertEquals( "missing-pom", e.getId() );
  501. }
  502. }
  503. @Test
  504. public void testGetRootNamespaces()
  505. throws Exception
  506. {
  507. assertEquals( Arrays.asList( "com", "org"), storage.listRootNamespaces( TEST_REPO_ID, ALL ) );
  508. }
  509. @Test
  510. public void testGetNamespaces()
  511. throws Exception
  512. {
  513. assertEquals( Arrays.asList( "example" ), storage.listNamespaces( TEST_REPO_ID, "com", ALL ) );
  514. assertEquals( Arrays.asList( "test" ), storage.listNamespaces( TEST_REPO_ID, "com.example", ALL ) );
  515. assertEquals( Collections.<String>emptyList(),
  516. storage.listNamespaces( TEST_REPO_ID, "com.example.test", ALL ) );
  517. assertEquals( Arrays.asList( "apache", "codehaus" ), storage.listNamespaces( TEST_REPO_ID, "org", ALL ) );
  518. assertEquals( Arrays.asList( "archiva", "maven" ), storage.listNamespaces( TEST_REPO_ID, "org.apache", ALL ) );
  519. assertEquals( Collections.<String>emptyList(),
  520. storage.listNamespaces( TEST_REPO_ID, "org.apache.archiva", ALL ) );
  521. assertEquals( Arrays.asList( "plugins", "shared" ),
  522. storage.listNamespaces( TEST_REPO_ID, "org.apache.maven", ALL ) );
  523. assertEquals( Collections.<String>emptyList(),
  524. storage.listNamespaces( TEST_REPO_ID, "org.apache.maven.plugins", ALL ) );
  525. assertEquals( Collections.<String>emptyList(),
  526. storage.listNamespaces( TEST_REPO_ID, "org.apache.maven.shared", ALL ) );
  527. assertEquals( Arrays.asList( "plexus" ), storage.listNamespaces( TEST_REPO_ID, "org.codehaus", ALL ) );
  528. assertEquals( Collections.<String>emptyList(),
  529. storage.listNamespaces( TEST_REPO_ID, "org.codehaus.plexus", ALL ) );
  530. }
  531. @Test
  532. public void testGetProjects()
  533. throws Exception
  534. {
  535. assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "com", ALL ) );
  536. assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "com.example", ALL ) );
  537. assertEquals( Arrays.asList( "incomplete-metadata", "invalid-pom", "malformed-metadata", "mislocated-pom",
  538. "missing-metadata", "missing-parent", "test-artifact" ),
  539. storage.listProjects( TEST_REPO_ID, "com.example.test", ALL ) );
  540. assertEquals( Collections.<String>emptyList(), storage.listProjects( TEST_REPO_ID, "org", ALL ) );
  541. assertEquals( Arrays.asList( "apache" ), storage.listProjects( TEST_REPO_ID, "org.apache", ALL ) );
  542. assertEquals( Arrays.asList( "archiva", "archiva-base", "archiva-common", "archiva-modules", "archiva-parent" ),
  543. storage.listProjects( TEST_REPO_ID, "org.apache.archiva", ALL ) );
  544. assertEquals( Arrays.asList( "maven-archiver", "maven-parent" ),
  545. storage.listProjects( TEST_REPO_ID, "org.apache.maven", ALL ) );
  546. assertEquals( Collections.<String>emptyList(),
  547. storage.listProjects( TEST_REPO_ID, "org.apache.maven.plugins", ALL ) );
  548. assertEquals( Arrays.asList( "maven-downloader", "maven-shared-components" ),
  549. storage.listProjects( TEST_REPO_ID, "org.apache.maven.shared", ALL ) );
  550. }
  551. @Test
  552. public void testGetProjectVersions()
  553. throws Exception
  554. {
  555. assertEquals( Arrays.asList( "1.0-SNAPSHOT" ),
  556. storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "incomplete-metadata", ALL ) );
  557. assertEquals( Arrays.asList( "1.0-SNAPSHOT" ),
  558. storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "malformed-metadata", ALL ) );
  559. assertEquals( Arrays.asList( "1.0-SNAPSHOT" ),
  560. storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "missing-metadata", ALL ) );
  561. assertEquals( Arrays.asList( "1.0" ),
  562. storage.listProjectVersions( TEST_REPO_ID, "com.example.test", "invalid-pom", ALL ) );
  563. assertEquals( Arrays.asList( "4", "5-SNAPSHOT", "7" ),
  564. storage.listProjectVersions( TEST_REPO_ID, "org.apache", "apache", ALL ) );
  565. assertEquals( Arrays.asList( "1.2.1", "1.2.2" ),
  566. storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva", ALL ) );
  567. assertEquals( Arrays.asList( "1.2.1" ),
  568. storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-base", ALL ) );
  569. assertEquals( Arrays.asList( "1.2.1" ),
  570. storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-common", ALL ) );
  571. assertEquals( Arrays.asList( "1.2.1" ),
  572. storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-modules", ALL ) );
  573. assertEquals( Arrays.asList( "3" ),
  574. storage.listProjectVersions( TEST_REPO_ID, "org.apache.archiva", "archiva-parent", ALL ) );
  575. assertEquals( Collections.<String>emptyList(),
  576. storage.listProjectVersions( TEST_REPO_ID, "org.apache.maven.shared", "maven-downloader", ALL ) );
  577. }
  578. @Test
  579. public void testGetArtifacts()
  580. throws Exception
  581. {
  582. List<ArtifactMetadata> artifacts = new ArrayList<>( storage.readArtifactsMetadata(
  583. new ReadMetadataRequest( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", ALL ) ) );
  584. assertEquals( 3, artifacts.size() );
  585. Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
  586. {
  587. @Override
  588. public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
  589. {
  590. return o1.getId().compareTo( o2.getId() );
  591. }
  592. } );
  593. assertArtifact( artifacts.get( 0 ), "plexus-spring-1.2-sources.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
  594. assertArtifact( artifacts.get( 1 ), "plexus-spring-1.2.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
  595. assertArtifact( artifacts.get( 2 ), "plexus-spring-1.2.pom", 7407, "96b14cf880e384b2d15e8193c57b65c5420ca4c5",
  596. "f83aa25f016212a551a4b2249985effc" );
  597. }
  598. @Test
  599. public void testGetArtifactsFiltered()
  600. throws Exception
  601. {
  602. ExcludesFilter<String> filter =
  603. new ExcludesFilter<String>( Collections.singletonList( "plexus-spring-1.2.pom" ) );
  604. List<ArtifactMetadata> artifacts = new ArrayList<>( storage.readArtifactsMetadata(
  605. new ReadMetadataRequest( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2", filter ) ) );
  606. assertEquals( 2, artifacts.size() );
  607. Collections.sort( artifacts, new Comparator<ArtifactMetadata>()
  608. {
  609. @Override
  610. public int compare( ArtifactMetadata o1, ArtifactMetadata o2 )
  611. {
  612. return o1.getId().compareTo( o2.getId() );
  613. }
  614. } );
  615. assertArtifact( artifacts.get( 0 ), "plexus-spring-1.2-sources.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
  616. assertArtifact( artifacts.get( 1 ), "plexus-spring-1.2.jar", 0, EMPTY_SHA1, EMPTY_MD5 );
  617. }
  618. @Test
  619. public void testGetArtifactsTimestampedSnapshots()
  620. throws Exception
  621. {
  622. List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>( storage.readArtifactsMetadata(
  623. new ReadMetadataRequest( TEST_REPO_ID, "com.example.test", "missing-metadata", "1.0-SNAPSHOT", ALL ) ) );
  624. assertEquals( 1, artifacts.size() );
  625. ArtifactMetadata artifact = artifacts.get( 0 );
  626. assertEquals( "missing-metadata-1.0-20091101.112233-1.pom", artifact.getId() );
  627. assertEquals( "com.example.test", artifact.getNamespace() );
  628. assertEquals( "missing-metadata", artifact.getProject() );
  629. assertEquals( "1.0-20091101.112233-1", artifact.getVersion() );
  630. assertEquals( TEST_REPO_ID, artifact.getRepositoryId() );
  631. }
  632. private void assertArtifact( ArtifactMetadata artifact, String id, int size, String sha1, String md5 )
  633. {
  634. assertEquals( id, artifact.getId() );
  635. assertEquals( md5, artifact.getMd5() );
  636. assertEquals( sha1, artifact.getSha1() );
  637. assertEquals( size, artifact.getSize() );
  638. assertEquals( "org.codehaus.plexus", artifact.getNamespace() );
  639. assertEquals( "plexus-spring", artifact.getProject() );
  640. assertEquals( "1.2", artifact.getVersion() );
  641. assertEquals( TEST_REPO_ID, artifact.getRepositoryId() );
  642. }
  643. private void assertMailingList( MailingList mailingList, String name, String archive, String post, String subscribe,
  644. String unsubscribe, List<String> otherArchives, boolean allowPost )
  645. {
  646. assertEquals( archive, mailingList.getMainArchiveUrl() );
  647. if ( allowPost )
  648. {
  649. assertEquals( post, mailingList.getPostAddress() );
  650. }
  651. else
  652. {
  653. assertNull( mailingList.getPostAddress() );
  654. }
  655. assertEquals( subscribe, mailingList.getSubscribeAddress() );
  656. assertEquals( unsubscribe, mailingList.getUnsubscribeAddress() );
  657. assertEquals( name, mailingList.getName() );
  658. assertEquals( otherArchives, mailingList.getOtherArchives() );
  659. }
  660. private void assertMailingList( String prefix, MailingList mailingList, String name, boolean allowPost,
  661. String nabbleUrl )
  662. {
  663. List<String> otherArchives = new ArrayList<>();
  664. otherArchives.add( "http://www.mail-archive.com/" + prefix + "@archiva.apache.org" );
  665. if ( nabbleUrl != null )
  666. {
  667. otherArchives.add( nabbleUrl );
  668. }
  669. otherArchives.add( "http://markmail.org/list/org.apache.archiva." + prefix );
  670. assertMailingList( mailingList, name, "http://mail-archives.apache.org/mod_mbox/archiva-" + prefix + "/",
  671. prefix + "@archiva.apache.org", prefix + "-subscribe@archiva.apache.org",
  672. prefix + "-unsubscribe@archiva.apache.org", otherArchives, allowPost );
  673. }
  674. private void checkApacheLicense( ProjectVersionMetadata metadata )
  675. {
  676. assertEquals( Arrays.asList( new License( "The Apache Software License, Version 2.0",
  677. "http://www.apache.org/licenses/LICENSE-2.0.txt" ) ),
  678. metadata.getLicenses() );
  679. }
  680. private void checkOrganizationApache( ProjectVersionMetadata metadata )
  681. {
  682. assertEquals( "The Apache Software Foundation", metadata.getOrganization().getName() );
  683. assertEquals( "http://www.apache.org/", metadata.getOrganization().getUrl() );
  684. }
  685. private void deleteTestArtifactWithParent( List<String> pathsToBeDeleted )
  686. throws IOException
  687. {
  688. for ( String path : pathsToBeDeleted )
  689. {
  690. Path dir = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), path );
  691. org.apache.archiva.common.utils.FileUtils.deleteDirectory( dir );
  692. assertFalse( Files.exists(dir) );
  693. }
  694. Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-module-a" );
  695. Path parentPom =
  696. Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-parent" );
  697. Path rootPom = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), "target/test-repository/com/example/test/test-artifact-root" );
  698. org.apache.archiva.common.utils.FileUtils.deleteDirectory( dest );
  699. org.apache.archiva.common.utils.FileUtils.deleteDirectory( parentPom );
  700. org.apache.archiva.common.utils.FileUtils.deleteDirectory( rootPom );
  701. assertFalse( Files.exists(dest) );
  702. assertFalse( Files.exists(parentPom) );
  703. assertFalse( Files.exists(rootPom) );
  704. }
  705. private Path copyTestArtifactWithParent( String srcPath, String destPath )
  706. throws IOException
  707. {
  708. Path src = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), srcPath );
  709. Path dest = Paths.get( org.apache.archiva.common.utils.FileUtils.getBasedir(), destPath );
  710. FileUtils.copyDirectory( src.toFile(), dest.toFile() );
  711. assertTrue( Files.exists(dest) );
  712. return dest;
  713. }
  714. }