/* * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */ package org.mule.runtime.module.repository.internal; import static org.hamcrest.core.Is.is; import static org.hamcrest.core.IsNull.notNullValue; import static org.junit.Assert.assertThat; import static org.junit.rules.ExpectedException.none; import static org.mule.runtime.module.repository.internal.RepositoryServiceFactory.MULE_REMOTE_REPOSITORIES_PROPERTY; import static org.mule.runtime.module.repository.internal.RepositoryServiceFactory.MULE_REPOSITORY_FOLDER_PROPERTY; import static org.mule.tck.MuleTestUtils.testWithSystemProperty; import org.mule.runtime.module.artifact.descriptor.BundleDependency; import org.mule.runtime.module.artifact.descriptor.BundleDescriptor; import org.mule.runtime.module.repository.api.BundleNotFoundException; import org.mule.runtime.module.repository.api.RepositoryConnectionException; import org.mule.runtime.module.repository.api.RepositoryService; import org.mule.runtime.module.repository.api.RepositoryServiceDisabledException; import org.mule.tck.junit4.AbstractMuleTestCase; import java.io.File; import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.rules.TemporaryFolder; public class RepositorySystemTestCase extends AbstractMuleTestCase { private static final BundleDescriptor VALID_BUNDLE_DESCRIPTOR = new BundleDescriptor.Builder().setGroupId("ant").setArtifactId("ant-antlr").setVersion("1.6").build(); private static final BundleDependency VALID_BUNDLE = new BundleDependency.Builder().sedBundleDescriptor(VALID_BUNDLE_DESCRIPTOR).build(); @Rule public TemporaryFolder temporaryFolder = new TemporaryFolder(); @Rule public ExpectedException expectedException = none(); @Test public void existingResourceFromMaven() throws Exception { executeTestWithDefaultRemoteRepo(() -> { RepositoryService defaultRepositoryService = new RepositoryServiceFactory().createRepositoryService(); File bundleFile = defaultRepositoryService.lookupBundle(VALID_BUNDLE); assertThat(bundleFile, notNullValue()); assertThat(bundleFile.exists(), is(true)); assertThat(bundleFile.getAbsolutePath().startsWith(temporaryFolder.getRoot().getAbsolutePath()), is(true)); }); } @Test public void noExistentResource() throws Exception { executeTestWithDefaultRemoteRepo(() -> { RepositoryService defaultRepositoryService = new RepositoryServiceFactory().createRepositoryService(); BundleDescriptor bundleDescriptor = new BundleDescriptor.Builder().setGroupId("no").setArtifactId("existent").setVersion("bundle").build(); expectedException.expect(BundleNotFoundException.class); defaultRepositoryService .lookupBundle(new BundleDependency.Builder().sedBundleDescriptor(bundleDescriptor).build()); }); } @Test public void invalidExternalRepository() throws Exception { executeTestWithCustomRepoRepo("http://doesnotexists/repo", () -> { RepositoryService defaultRepositoryService = new RepositoryServiceFactory().createRepositoryService(); expectedException.expect(RepositoryConnectionException.class); defaultRepositoryService.lookupBundle(VALID_BUNDLE); }); } @Test public void noRepositoryConfigured() throws Exception { executeTestWithCustomRepoRepo(null, () -> { RepositoryService defaultRepositoryService = new RepositoryServiceFactory().createRepositoryService(); expectedException.expect(RepositoryServiceDisabledException.class); defaultRepositoryService.lookupBundle(VALID_BUNDLE); }); } private void executeTestWithDefaultRemoteRepo(TestTask test) throws Exception { testWithSystemProperty(MULE_REPOSITORY_FOLDER_PROPERTY, temporaryFolder.getRoot().getAbsolutePath(), () -> { testWithSystemProperty(MULE_REMOTE_REPOSITORIES_PROPERTY, "http://central.maven.org/maven2/", () -> { test.execute(); }); }); } private void executeTestWithCustomRepoRepo(String repositoryUrl, TestTask test) throws Exception { testWithSystemProperty(MULE_REPOSITORY_FOLDER_PROPERTY, temporaryFolder.getRoot().getAbsolutePath(), () -> { testWithSystemProperty(MULE_REMOTE_REPOSITORIES_PROPERTY, repositoryUrl, () -> { test.execute(); }); }); } interface TestTask { void execute() throws Exception; } }