package org.org.repository.crawler.services; import java.io.File; import java.net.URISyntaxException; import java.util.LinkedHashSet; import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import junit.framework.TestCase; import org.org.model.IModelItem; import org.org.model.IModelItemListener; import org.org.model.IModelItemVisitor; import org.org.model.ModelItemEvent; import org.org.repository.crawler.items.IFileSystemCrawledRepositorySetup; import org.org.repository.crawler.items.mutable.FileSystemCrawledRepositorySetup; import org.org.repository.crawler.maven2.RepositoryCrawlerService; import org.org.repository.crawler.maven2.model.Artifact; import org.org.repository.crawler.maven2.model.ArtifactVersion; import org.org.repository.crawler.maven2.model.Group; import org.org.repository.crawler.maven2.model.CrawledRepository; import org.org.repository.crawler.maven2.model.protocolplugins.FileSystemRepositoryBrowserPlugin; /** * @author zepag */ public class FileSystemCrawledRepositoryServiceIntegrationTest extends TestCase { public final static String REPOSITORY_PATH; public final static Integer TOTAL_ARTIFACT_VERSIONS = 6; static { String tmpPath = null; try { tmpPath = new File(Thread.currentThread().getContextClassLoader().getResource("test-repo").toURI()).getAbsolutePath(); } catch (URISyntaxException e) { e.printStackTrace(); } REPOSITORY_PATH = tmpPath; } public static class CounterModelItemListener implements IModelItemListener { private final AtomicInteger atomicInteger = new AtomicInteger(0); private final Class<?> modelItemType; public CounterModelItemListener(final Class<?> modelItemType) { this.modelItemType = modelItemType; } public void changeOccured(ModelItemEvent modelItemEvent) { if (modelItemEvent.getEventType() == ModelItemEvent.EventType.POST_ADD_CHILD && modelItemType.isAssignableFrom(modelItemEvent.getTargetItem().getClass())) { atomicInteger.incrementAndGet(); } } public void clearCounter() { atomicInteger.set(0); } public Integer getCount() { return atomicInteger.get(); } } public static class CounterModelVisitor implements IModelItemVisitor { private final AtomicInteger atomicInteger = new AtomicInteger(0); private final Class<?> modelItemType; public CounterModelVisitor(final Class<?> modelItemType) { this.modelItemType = modelItemType; } @SuppressWarnings("rawtypes") public boolean visit(IModelItem modelItem) { if (modelItemType.isAssignableFrom(modelItem.getClass())) { atomicInteger.incrementAndGet(); } return true; } public void clearCounter() { atomicInteger.set(0); } public Integer getCount() { return atomicInteger.get(); } } @Override protected void setUp() throws Exception { super.setUp(); File repositoryPath = new File(REPOSITORY_PATH); assertTrue("Test repository " + REPOSITORY_PATH + " is not available.", repositoryPath.exists()); } /** * This tests the retrieval of the whole specified repository */ public void testRetrieveRepo() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); CrawledRepository crawledRepository = mavenRepositoryService.retrieveRepository(repositorySetup, "CrawledRepository Maven local", artifactVersionCounter); assertNotNull(crawledRepository); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(TOTAL_ARTIFACT_VERSIONS, artifactVersionCounter.getCount()); } /** * This tests the retrieval of the specified repository with a filter on the "org.org-libs" group.<br> * This should retrieve all the artifacts with a group name starting with "org.org-libs". */ public void testRetrieveRepoWithFilter() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); Set<String> groupFilters = new LinkedHashSet<String>(); groupFilters.add("org.org-libs.*"); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH, groupFilters); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); CrawledRepository crawledRepository = mavenRepositoryService.retrieveRepository(repositorySetup, "CrawledRepository Maven local", artifactVersionCounter); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(new Integer(TOTAL_ARTIFACT_VERSIONS - 1), artifactVersionCounter.getCount()); } /** * This tests the retrieval of the specified repository with a precise group specified.<br> * This should retrieve all the repository. */ public void testRetrieveRepoWithPreciseGroupFilter() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); Set<String> groupFilters = new LinkedHashSet<String>(); groupFilters.add("org.org-libs"); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH, groupFilters); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); CrawledRepository crawledRepository = mavenRepositoryService.retrieveRepository(repositorySetup, "CrawledRepository Maven local", artifactVersionCounter); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(new Integer(TOTAL_ARTIFACT_VERSIONS - 2), artifactVersionCounter.getCount()); } /** * */ public void testRetrieveGroup() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); Group group = mavenRepositoryService.retrieveGroup(repositorySetup, "org.org-libs", artifactVersionCounter); assertNotNull(group); assertEquals("org.org-libs", group.getName()); assertTrue("Group has children", group.hasChildren()); for (Artifact modelItem : group.getChildren()) { assertTrue(modelItem.hasChildren()); } assertEquals(new Integer(TOTAL_ARTIFACT_VERSIONS - 2), artifactVersionCounter.getCount()); } /** * */ public void testRetrieveGroup2() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); Group group = mavenRepositoryService.retrieveGroup(repositorySetup, "org.org-libs.org-libs-usurper", artifactVersionCounter); assertNotNull(group); assertEquals("org.org-libs.org-libs-usurper", group.getName()); assertTrue("Group has children", group.hasChildren()); for (Artifact modelItem : group.getChildren()) { assertTrue(modelItem.hasChildren()); } assertEquals(new Integer(1), artifactVersionCounter.getCount()); } /** * */ @SuppressWarnings("rawtypes") public void testRetrieveArtifact() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); Artifact artifact = mavenRepositoryService.retrieveArtifact(repositorySetup, "org.org-libs", "org-libs-usurper", artifactVersionCounter); assertNotNull(artifact); assertEquals("org-libs-usurper", artifact.getId()); assertTrue(artifact.hasChildren()); for (IModelItem modelItem : artifact.getChildren()) { assertTrue(modelItem instanceof ArtifactVersion); } assertEquals(new Integer(2), artifactVersionCounter.getCount()); } /** * */ public void testRetrieveArtifactVersion() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); Set<ArtifactVersion> artifactVersions = mavenRepositoryService.retrieveArtifactVersions(repositorySetup, "org.org-libs", "org-libs-usurper", "1.0.0"); assertTrue(artifactVersions.size() > 0); assertEquals(artifactVersions.size(), 2); } /** * */ public void testRefreshRepoWithPreciseGroup() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); CrawledRepository crawledRepository = mavenRepositoryService.retrieveRepository(repositorySetup, "CrawledRepository Maven local", artifactVersionCounter); assertNotNull(crawledRepository); assertTrue(crawledRepository.hasChildren()); assertEquals(TOTAL_ARTIFACT_VERSIONS, artifactVersionCounter.getCount()); artifactVersionCounter.clearCounter(); crawledRepository.addGroupFilter("org.org-libs"); crawledRepository.clearChildren(); crawledRepository = mavenRepositoryService.refreshRepository(crawledRepository, crawledRepository.getLabel(), artifactVersionCounter); assertNotNull(crawledRepository); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(new Integer(TOTAL_ARTIFACT_VERSIONS - 2), artifactVersionCounter.getCount()); } /** * */ public void testRefreshRepoWithPreciseGroupAndFormerGroupsKept() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); CrawledRepository crawledRepository = mavenRepositoryService.retrieveRepository(repositorySetup, "CrawledRepository Maven local", artifactVersionCounter); assertNotNull(crawledRepository); assertTrue(crawledRepository.hasChildren()); assertEquals(TOTAL_ARTIFACT_VERSIONS, artifactVersionCounter.getCount()); artifactVersionCounter.clearCounter(); crawledRepository.addGroupFilter("org.org-libs"); crawledRepository = mavenRepositoryService.refreshRepository(crawledRepository, crawledRepository.getLabel(), artifactVersionCounter); assertNotNull(crawledRepository); assertTrue(crawledRepository.hasChildren()); assertTrue(crawledRepository.getRepositorySetup().getGroupFilters().contains("org")); assertTrue(crawledRepository.getRepositorySetup().getGroupFilters().contains("org.org-libs")); assertTrue(crawledRepository.getRepositorySetup().getGroupFilters().contains("org.org-libs.org-libs-usurper")); assertEquals(3, crawledRepository.getChildren().size()); CounterModelVisitor artifactVersionCountVisitor = new CounterModelVisitor(ArtifactVersion.class); crawledRepository.accept(artifactVersionCountVisitor); assertEquals(TOTAL_ARTIFACT_VERSIONS, artifactVersionCountVisitor.getCount()); assertEquals(new Integer(0), artifactVersionCounter.getCount()); } /** * */ public void testRefreshRepoWithFilter() { RepositoryCrawlerService<IFileSystemCrawledRepositorySetup> mavenRepositoryService = new RepositoryCrawlerService<IFileSystemCrawledRepositorySetup>(new FileSystemRepositoryBrowserPlugin()); IFileSystemCrawledRepositorySetup repositorySetup = new FileSystemCrawledRepositorySetup(REPOSITORY_PATH); CounterModelItemListener artifactVersionCounter = new CounterModelItemListener(ArtifactVersion.class); CrawledRepository crawledRepository = mavenRepositoryService.retrieveRepository(repositorySetup, "CrawledRepository Maven local", artifactVersionCounter); assertNotNull(crawledRepository); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(TOTAL_ARTIFACT_VERSIONS, artifactVersionCounter.getCount()); artifactVersionCounter.clearCounter(); crawledRepository.addGroupFilter("org.org-libs"); crawledRepository.clearChildren(); crawledRepository = mavenRepositoryService.refreshRepository(crawledRepository, crawledRepository.getLabel(), artifactVersionCounter); assertNotNull(crawledRepository); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(new Integer(TOTAL_ARTIFACT_VERSIONS - 2), artifactVersionCounter.getCount()); artifactVersionCounter.clearCounter(); crawledRepository.addGroupFilter(".*"); crawledRepository.clearChildren(); crawledRepository = mavenRepositoryService.refreshRepository(crawledRepository, crawledRepository.getLabel(), artifactVersionCounter); assertNotNull(crawledRepository); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(new Integer(TOTAL_ARTIFACT_VERSIONS), artifactVersionCounter.getCount()); artifactVersionCounter.clearCounter(); crawledRepository.clearGroupFilters(); crawledRepository.addGroupFilter("org.org-libs.org-libs-usurper.*"); crawledRepository.clearChildren(); crawledRepository = mavenRepositoryService.refreshRepository(crawledRepository, crawledRepository.getLabel(), artifactVersionCounter); assertNotNull(crawledRepository); assertTrue("CrawledRepository has children", crawledRepository.hasChildren()); assertEquals(new Integer(1), artifactVersionCounter.getCount()); } }