/** * Copyright (C) 2015 Orange * Licensed 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. */ package com.francetelecom.clara.cloud.mvn.consumer; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.net.URLConnection; import org.junit.Assert; import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import com.francetelecom.clara.cloud.commons.MavenReference; @ContextConfiguration @RunWith(SpringJUnit4ClassRunner.class) @DirtiesContext public class MvnRepoDaoImplResolveUrlIT { public static final String PROBES_GROUPID = "com.orange.clara.cloud.probes"; private static Logger logger = LoggerFactory.getLogger(MvnRepoDaoImplResolveUrlIT.class.getName()); @Autowired private MvnRepoDao mvnRepoDao; @Autowired @Qualifier("systemTestAppsVersion") private String systemTestAppsVersion; @Autowired @Qualifier("elpaasoVersion") private String elpaasoVersion; @BeforeClass public static void setup() throws MalformedURLException { // Ignore https certificate XTrustProvider.install(); File basedir = new File(System.getProperty("basedir", "")).getAbsoluteFile(); System.setProperty("build.dir", new File(basedir, "target").toURI().toURL().toExternalForm()); } @Test public void should_resolve_war_for_cf_wicketoo_jpa_deployed_on_internal_repo() { MavenReference mavenRef0 = new MavenReference("com.orange.clara.cloud.samples.cf", "cf-wicket-jpa-war", "1.1.4", "war"); MavenReference mavenRef1 = mvnRepoDao.resolveUrl(mavenRef0); assertAccessUrlIsValid(mavenRef1); } @Test(expected = MavenReferenceResolutionException.class) public void should_fail_to_resolve_an_invalid_maven_ref() { MavenReference mavenRef0 = new MavenReference("group", "artifact", "version", "ear"); mvnRepoDao.resolveUrl(mavenRef0); } @Test public void should_resolve_paas_probe_simple_jar_with_systemTestAppsVersion() { testResolveUrl(new MavenReference(PROBES_GROUPID, "paas-probe-simple", systemTestAppsVersion, "jar")); } @Test public void should_resolve_ear_artifact_for_jeeprobe_latest_snapshot() { MavenReference ear = new MavenReference(PROBES_GROUPID, "paas-probe-jee-ear", "LATEST", "ear"); MavenReference resolvedUrl = resolveUrlAndAssertResultNotNull(ear); assertTrue(ear.getArtifactId() + " snapshot reference :" + resolvedUrl.getAccessUrl().getPath() + " should contain -SNAPSHOT in url", resolvedUrl.getAccessUrl().getPath().contains("-SNAPSHOT")); } @Test public void should_resolve_war_artifact_for_elpaaso_latest_snapshot() { MavenReference ear = new MavenReference("com.orange.clara.cloud", "cloud-paas-webapp-war", "LATEST", "war"); MavenReference resolvedUrl = resolveUrlAndAssertResultNotNull(ear); assertTrue("Should contain elpaaso snapshot reference :" + resolvedUrl.getAccessUrl().getPath(), resolvedUrl.getAccessUrl().getPath().contains(elpaasoVersion)); } @Test public void should_resolve_war_artifact_for_elpaaso_latest_release() { MavenReference ear = new MavenReference("com.orange.clara.cloud", "cloud-paas-webapp-war", "RELEASE", "war"); MavenReference resolvedUrl = resolveUrlAndAssertResultNotNull(ear); assertFalse("Elpaaso released artifact should not be snapshot : " + resolvedUrl.getAccessUrl().getPath(), resolvedUrl.getAccessUrl().getPath() .contains("-SNAPSHOT")); } private void assertResolveUrlIsValid(MavenReference mvnBefore) { MavenReference mvnAfter = this.mvnRepoDao.resolveUrl(mvnBefore); assertNotNull(mvnAfter.getAccessUrl()); logger.info("reference resolue sur le repo " + mvnAfter + " sur URL " + mvnAfter.getAccessUrl()); checkDownloadIsPossible(mvnAfter); } private void checkDownloadIsPossible(MavenReference mvnAfter) { InputStream data = null; try { URLConnection connection = mvnAfter.getAccessUrl().openConnection(); data = connection.getInputStream(); assertTrue(data.available() > 0); } catch (IOException e) { fail(e.getLocalizedMessage() + " - " + e.toString()); } finally { if (data != null) { try { data.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * utility method to test and assert resolve url * * @param unresolvedReference */ private void testResolveUrl(MavenReference unresolvedReference) { MavenReference mvnBefore = unresolvedReference; assertResolveUrlIsValid(mvnBefore); } private MavenReference resolveUrlAndAssertResultNotNull(MavenReference mavenReference) { assertNotNull(mavenReference); MavenReference resolvedUrl = mvnRepoDao.resolveUrl(mavenReference); assertNotNull(resolvedUrl); return resolvedUrl; } private void assertAccessUrlIsValid(MavenReference mavenRef1) { URL url = mavenRef1.getAccessUrl(); Assert.assertNotNull("access url is null for " + mavenRef1, url); Assert.assertTrue("access url is not valid for " + mavenRef1 + " url = " + url, isValidUrl(url)); } private boolean isValidUrl(URL url) { HttpURLConnection huc; int responseCode = 0; try { huc = (HttpURLConnection) url.openConnection(); huc.setRequestMethod("GET"); huc.setReadTimeout(5000); huc.connect(); responseCode = huc.getResponseCode(); } catch (IOException e) { logger.error("unable to test url " + url, e); } return responseCode == 200; } }