org.apache.archiva.rest.services.RepositoriesServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for org.apache.archiva.rest.services.RepositoriesServiceTest.java

Source

package org.apache.archiva.rest.services;

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.utils.FileUtil;
import org.apache.archiva.maven2.model.Artifact;
import org.apache.archiva.rest.api.model.BrowseResult;
import org.apache.archiva.rest.api.model.BrowseResultEntry;
import org.apache.archiva.rest.api.model.VersionsList;
import org.apache.archiva.rest.api.services.BrowseService;
import org.apache.archiva.rest.api.services.ManagedRepositoriesService;
import org.apache.archiva.rest.api.services.RepositoriesService;
import org.apache.commons.io.FileUtils;
import org.junit.Test;

import javax.ws.rs.BadRequestException;
import javax.ws.rs.ForbiddenException;
import javax.ws.rs.core.Response;
import java.io.File;
import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

/**
 * @author Olivier Lamy
 */
public class RepositoriesServiceTest extends AbstractArchivaRestTest {

    @Test(expected = ForbiddenException.class)
    public void scanRepoKarmaFailed() throws Exception {
        RepositoriesService service = getRepositoriesService();
        try {
            service.scanRepository("id", true);
        } catch (ForbiddenException e) {
            assertEquals(403, e.getResponse().getStatus());
            throw e;
        }
    }

    @Test
    public void scanRepo() throws Exception {
        RepositoriesService service = getRepositoriesService(authorizationHeader);

        ManagedRepositoriesService managedRepositoriesService = getManagedRepositoriesService(authorizationHeader);

        String repoId = managedRepositoriesService.getManagedRepositories().get(0).getId();

        int timeout = 20000;
        while (timeout > 0 && service.alreadyScanning(repoId)) {
            Thread.sleep(500);
            timeout -= 500;
        }

        assertTrue(service.scanRepository(repoId, true));
    }

    @Test(expected = ForbiddenException.class)
    public void deleteArtifactKarmaFailed() throws Exception {
        try {
            Artifact artifact = new Artifact();
            artifact.setGroupId("commons-logging");
            artifact.setArtifactId("commons-logging");
            artifact.setVersion("1.0.1");
            artifact.setPackaging("jar");
            artifact.setContext(SOURCE_REPO_ID);

            RepositoriesService repositoriesService = getRepositoriesService(null);

            repositoriesService.deleteArtifact(artifact);
        } catch (ForbiddenException e) {
            assertEquals(403, e.getResponse().getStatus());
            throw e;

        }
    }

    @Test(expected = BadRequestException.class)
    public void deleteWithRepoNull() throws Exception {
        try {

            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);

            Artifact artifact = new Artifact();
            artifact.setGroupId("commons-logging");
            artifact.setArtifactId("commons-logging");
            artifact.setVersion("1.0.1");
            artifact.setPackaging("jar");

            repositoriesService.deleteArtifact(artifact);
        } catch (BadRequestException e) {
            assertEquals("not http " + Response.Status.BAD_REQUEST.getStatusCode() + " status",
                    Response.Status.BAD_REQUEST.getStatusCode(), e.getResponse().getStatus());
            throw e;
        }
    }

    /**
     * delete a version of an artifact without packaging
     *
     * @throws Exception
     */
    @Test
    public void deleteArtifactVersion() throws Exception {
        initSourceTargetRepo();

        BrowseService browseService = getBrowseService(authorizationHeader, false);

        List<Artifact> artifacts = browseService.getArtifactDownloadInfos("org.apache.karaf.features",
                "org.apache.karaf.features.core", "2.2.2", SOURCE_REPO_ID);

        log.info("artifacts: {}", artifacts);

        assertThat(artifacts).isNotNull().isNotEmpty().hasSize(2);

        VersionsList versionsList = browseService.getVersionsList("org.apache.karaf.features",
                "org.apache.karaf.features.core", SOURCE_REPO_ID);
        assertThat(versionsList.getVersions()).isNotNull().isNotEmpty().hasSize(2);

        log.info("artifacts.size: {}", artifacts.size());

        try {
            File artifactFile = new File(
                    "target/test-origin-repo/org/apache/karaf/features/org.apache.karaf.features.core/2.2.2/org.apache.karaf.features.core-2.2.2.jar");

            assertTrue("artifact not exists:" + artifactFile.getPath(), artifactFile.exists());

            Artifact artifact = new Artifact();
            artifact.setGroupId("org.apache.karaf.features");
            artifact.setArtifactId("org.apache.karaf.features.core");
            artifact.setVersion("2.2.2");
            artifact.setContext(SOURCE_REPO_ID);

            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);

            repositoriesService.deleteArtifact(artifact);

            assertFalse("artifact not deleted exists:" + artifactFile.getPath(), artifactFile.exists());

            artifacts = browseService.getArtifactDownloadInfos("org.apache.karaf.features",
                    "org.apache.karaf.features.core", "2.2.2", SOURCE_REPO_ID);

            assertThat(artifacts).isNotNull().isEmpty();

            versionsList = browseService.getVersionsList("org.apache.karaf.features",
                    "org.apache.karaf.features.core", SOURCE_REPO_ID);

            assertThat(versionsList.getVersions()).isNotNull().isNotEmpty().hasSize(1);

        } finally {
            cleanRepos();
        }
    }

    @Test
    public void deleteArtifact() throws Exception {
        initSourceTargetRepo();

        BrowseService browseService = getBrowseService(authorizationHeader, false);

        List<Artifact> artifacts = browseService.getArtifactDownloadInfos("org.apache.karaf.features",
                "org.apache.karaf.features.core", "2.2.2", SOURCE_REPO_ID);

        log.info("artifacts: {}", artifacts);

        assertThat(artifacts).isNotNull().isNotEmpty().hasSize(2);

        VersionsList versionsList = browseService.getVersionsList("org.apache.karaf.features",
                "org.apache.karaf.features.core", SOURCE_REPO_ID);
        assertThat(versionsList.getVersions()).isNotNull().isNotEmpty().hasSize(2);

        log.info("artifacts.size: {}", artifacts.size());

        try {
            File artifactFile = new File(
                    "target/test-origin-repo/org/apache/karaf/features/org.apache.karaf.features.core/2.2.2/org.apache.karaf.features.core-2.2.2.jar");

            assertTrue("artifact not exists:" + artifactFile.getPath(), artifactFile.exists());

            Artifact artifact = new Artifact();
            artifact.setGroupId("org.apache.karaf.features");
            artifact.setArtifactId("org.apache.karaf.features.core");
            artifact.setVersion("2.2.2");
            artifact.setPackaging("jar");
            artifact.setContext(SOURCE_REPO_ID);

            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);

            repositoriesService.deleteArtifact(artifact);

            assertFalse("artifact not deleted exists:" + artifactFile.getPath(), artifactFile.exists());

            artifacts = browseService.getArtifactDownloadInfos("org.apache.karaf.features",
                    "org.apache.karaf.features.core", "2.2.2", SOURCE_REPO_ID);

            assertThat(artifacts).isNotNull().isEmpty();

            versionsList = browseService.getVersionsList("org.apache.karaf.features",
                    "org.apache.karaf.features.core", SOURCE_REPO_ID);

            assertThat(versionsList.getVersions()).isNotNull().isNotEmpty().hasSize(1);

        } finally {
            cleanRepos();
        }
    }

    @Test
    public void deleteArtifactWithClassifier() throws Exception {
        initSourceTargetRepo();

        BrowseService browseService = getBrowseService(authorizationHeader, false);

        List<Artifact> artifacts = browseService.getArtifactDownloadInfos("commons-logging", "commons-logging",
                "1.0.1", SOURCE_REPO_ID);

        assertThat(artifacts).isNotNull().isNotEmpty().hasSize(3);

        VersionsList versionsList = browseService.getVersionsList("commons-logging", "commons-logging",
                SOURCE_REPO_ID);
        assertThat(versionsList.getVersions()).isNotNull().isNotEmpty().hasSize(6);

        log.info("artifacts.size: {}", artifacts.size());

        try {
            File artifactFile = new File(
                    "target/test-origin-repo/commons-logging/commons-logging/1.0.1/commons-logging-1.0.1-javadoc.jar");

            File artifactFilemd5 = new File(
                    "target/test-origin-repo/commons-logging/commons-logging/1.0.1/commons-logging-1.0.1-javadoc.jar.md5");

            File artifactFilesha1 = new File(
                    "target/test-origin-repo/commons-logging/commons-logging/1.0.1/commons-logging-1.0.1-javadoc.jar.sha1");

            assertTrue("artifact not exists:" + artifactFile.getPath(), artifactFile.exists());

            assertTrue("md5 not exists:" + artifactFilemd5.getPath(), artifactFilemd5.exists());
            assertTrue("sha1 not exists:" + artifactFilesha1.getPath(), artifactFilesha1.exists());

            Artifact artifact = new Artifact();
            artifact.setGroupId("commons-logging");
            artifact.setArtifactId("commons-logging");
            artifact.setVersion("1.0.1");
            artifact.setClassifier("javadoc");
            artifact.setPackaging("jar");
            artifact.setContext(SOURCE_REPO_ID);

            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);

            repositoriesService.deleteArtifact(artifact);

            assertFalse("artifact not deleted exists:" + artifactFile.getPath(), artifactFile.exists());
            assertFalse("md5 still exists:" + artifactFilemd5.getPath(), artifactFilemd5.exists());
            assertFalse("sha1 still exists:" + artifactFilesha1.getPath(), artifactFilesha1.exists());

            artifacts = browseService.getArtifactDownloadInfos("commons-logging", "commons-logging", "1.0.1",
                    SOURCE_REPO_ID);

            log.info("artifact: {}", artifacts);

            assertThat(artifacts).isNotNull().isNotEmpty().hasSize(2);

            versionsList = browseService.getVersionsList("commons-logging", "commons-logging", SOURCE_REPO_ID);

            log.info("versionsList: {}", versionsList);

            assertThat(versionsList.getVersions()).isNotNull().isNotEmpty().hasSize(6);

        } finally {
            cleanRepos();
        }
    }

    @Test
    public void deleteGroupId() throws Exception {
        initSourceTargetRepo();
        try {
            BrowseService browseService = getBrowseService(authorizationHeader, false);

            BrowseResult browseResult = browseService.browseGroupId("org.apache.karaf.features", SOURCE_REPO_ID);

            assertNotNull(browseResult);

            log.info("browseResult: {}", browseResult);

            assertThat(browseResult.getBrowseResultEntries()).isNotNull().isNotEmpty().contains(
                    new BrowseResultEntry("org.apache.karaf.features.org.apache.karaf.features.command", true),
                    new BrowseResultEntry("org.apache.karaf.features.org.apache.karaf.features.core", true));

            File directory = new File(
                    "target/test-origin-repo/org/apache/karaf/features/org.apache.karaf.features.command");

            assertTrue("directory not exists", directory.exists());

            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);
            repositoriesService.deleteGroupId("org.apache.karaf", SOURCE_REPO_ID);

            assertFalse("directory not exists", directory.exists());

            browseResult = browseService.browseGroupId("org.apache.karaf.features", SOURCE_REPO_ID);

            assertNotNull(browseResult);

            assertThat(browseResult.getBrowseResultEntries()).isNotNull().isEmpty();

            browseResult = browseService.browseGroupId("org.apache.karaf", SOURCE_REPO_ID);

            assertNotNull(browseResult);

            assertThat(browseResult.getBrowseResultEntries()).isNotNull().isEmpty();

            log.info("browseResult empty: {}", browseResult);
        } finally {
            cleanRepos();
        }
    }

    @Test
    public void authorizedToDeleteArtifacts() throws Exception {
        ManagedRepository managedRepository = getTestManagedRepository("SOURCE_REPO_ID", "SOURCE_REPO_ID");
        try {
            getManagedRepositoriesService(authorizationHeader).addManagedRepository(managedRepository);
            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);
            assertTrue(repositoriesService.isAuthorizedToDeleteArtifacts(managedRepository.getId()));
        } finally {
            cleanQuietlyRepo(managedRepository.getId());
        }
    }

    @Test
    public void notAuthorizedToDeleteArtifacts() throws Exception {
        ManagedRepository managedRepository = getTestManagedRepository("SOURCE_REPO_ID", "SOURCE_REPO_ID");
        try {
            getManagedRepositoriesService(authorizationHeader).addManagedRepository(managedRepository);
            RepositoriesService repositoriesService = getRepositoriesService(guestAuthzHeader);
            assertFalse(repositoriesService.isAuthorizedToDeleteArtifacts(managedRepository.getId()));
        } finally {
            cleanQuietlyRepo(managedRepository.getId());
        }
    }

    protected void cleanQuietlyRepo(String id) {
        try {
            getManagedRepositoriesService(authorizationHeader).deleteManagedRepository(id, true);
        } catch (Exception e) {
            log.info("ignore issue deleting test repo: {}", e.getMessage());
        }
    }

    @Test
    public void deleteSnapshot() throws Exception {
        File targetRepo = initSnapshotRepo();
        try {

            RepositoriesService repositoriesService = getRepositoriesService(authorizationHeader);
            //repositoriesService.scanRepositoryDirectoriesNow( SNAPSHOT_REPO_ID );

            BrowseService browseService = getBrowseService(authorizationHeader, false);
            List<Artifact> artifacts = browseService.getArtifactDownloadInfos(
                    "org.apache.archiva.redback.components", "spring-quartz", "2.0-SNAPSHOT", SNAPSHOT_REPO_ID);

            log.info("artifacts: {}", artifacts);

            assertThat(artifacts).isNotNull().isNotEmpty().hasSize(10);

            File artifactFile = new File(targetRepo,
                    "org/apache/archiva/redback/components/spring-quartz/2.0-SNAPSHOT/spring-quartz-2.0-20120618.214127-1.jar");

            File artifactFilemd5 = new File(targetRepo,
                    "org/apache/archiva/redback/components/spring-quartz/2.0-SNAPSHOT/spring-quartz-2.0-20120618.214127-1.jar.md5");

            File artifactFilepom = new File(targetRepo,
                    "org/apache/archiva/redback/components/spring-quartz/2.0-SNAPSHOT/spring-quartz-2.0-20120618.214127-1.pom");

            assertThat(artifactFile).exists();
            assertThat(artifactFilemd5).exists();
            assertThat(artifactFilepom).exists();

            // we delete only one snapshot
            Artifact artifact = new Artifact("org.apache.archiva.redback.components", "spring-quartz",
                    "2.0-20120618.214127-1");
            artifact.setPackaging("jar");
            artifact.setRepositoryId(SNAPSHOT_REPO_ID);
            artifact.setContext(SNAPSHOT_REPO_ID);

            repositoriesService.deleteArtifact(artifact);

            artifacts = browseService.getArtifactDownloadInfos("org.apache.archiva.redback.components",
                    "spring-quartz", "2.0-SNAPSHOT", SNAPSHOT_REPO_ID);

            log.info("artifacts: {}", artifacts);

            assertThat(artifacts).isNotNull().isNotEmpty().hasSize(8);

            assertThat(artifactFile).doesNotExist();
            assertThat(artifactFilemd5).doesNotExist();
            assertThat(artifactFilepom).doesNotExist();
        } catch (Exception e) {
            log.error(e.getMessage(), e);
            throw e;
        } finally {
            cleanSnapshotRepo();
        }
    }

    protected File initSnapshotRepo() throws Exception {
        File targetRepo = new File(getBasedir(), "target/repo-with-snapshots");
        if (targetRepo.exists()) {
            FileUtils.deleteDirectory(targetRepo);
        }
        assertFalse(targetRepo.exists());

        FileUtils.copyDirectoryToDirectory(new File(getBasedir(), "src/test/repo-with-snapshots"),
                targetRepo.getParentFile());

        if (getManagedRepositoriesService(authorizationHeader).getManagedRepository(SNAPSHOT_REPO_ID) != null) {
            getManagedRepositoriesService(authorizationHeader).deleteManagedRepository(SNAPSHOT_REPO_ID, true);
            assertNull(getManagedRepositoriesService(authorizationHeader).getManagedRepository(SNAPSHOT_REPO_ID));
        }
        ManagedRepository managedRepository = getTestManagedRepository(SNAPSHOT_REPO_ID, "repo-with-snapshots");
        /*managedRepository.setId( SNAPSHOT_REPO_ID );
        managedRepository.setLocation( );
        managedRepository.setCronExpression( "* * * * * ?" );*/
        getManagedRepositoriesService(authorizationHeader).addManagedRepository(managedRepository);
        assertNotNull(getManagedRepositoriesService(authorizationHeader).getManagedRepository(SNAPSHOT_REPO_ID));

        return targetRepo;
    }

    protected void cleanSnapshotRepo() throws Exception {

        if (getManagedRepositoriesService(authorizationHeader).getManagedRepository(SNAPSHOT_REPO_ID) != null) {
            try {
                getManagedRepositoriesService(authorizationHeader).deleteManagedRepository(SNAPSHOT_REPO_ID, true);
                assertNull(
                        getManagedRepositoriesService(authorizationHeader).getManagedRepository(SNAPSHOT_REPO_ID));
            } catch (Exception e) {
                log.warn("skip issue while cleaning test repository: this can cause test failure", e);
            }
        }

    }

    protected ManagedRepository getTestManagedRepository(String id, String path) {
        String location = new File(FileUtil.getBasedir(), "target/" + path).getAbsolutePath();
        return new ManagedRepository(id, id, location, "default", true, true, true, "2 * * * * ?", null, false, 80,
                80, true, false);
    }

    @Override
    protected ManagedRepository getTestManagedRepository() {
        return getTestManagedRepository("TEST", "test-repo");
    }

    static final String SNAPSHOT_REPO_ID = "snapshot-repo";

}