/*
* Copyright 2012 JBoss Inc
*
* 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 org.artificer.test.maven;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.HttpException;
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestInterceptor;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.protocol.HttpContext;
import org.jboss.resteasy.client.ClientExecutor;
import org.jboss.resteasy.client.core.executors.ApacheHttpClient4Executor;
import org.junit.Assert;
import org.junit.Test;
import org.artificer.atom.archive.ArtificerArchive;
import org.artificer.client.ClientRequest;
import org.artificer.client.ArtificerAtomApiClient;
import org.artificer.client.auth.BasicAuthenticationProvider;
import org.artificer.client.query.QueryResultSet;
import org.artificer.test.AbstractIntegrationTest;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
/**
* Unit test for the s-ramp maven facade.
*
* @author eric.wittmann@redhat.com
* @author Brett Meyer
*/
public class ArtificerMavenTest extends AbstractIntegrationTest {
/**
* Unit test.
*/
@Test
public void testPush() throws Exception {
InputStream metaDataStream = null;
InputStream artifactStream = null;
InputStream pomStream = null;
InputStream artifactSHA1Stream = null;
InputStream pomSHA1Stream = null;
try {
metaDataStream = getClass().getResourceAsStream("maven-metadata.xml");
artifactStream = getClass().getResourceAsStream("artifact-0.0.3.jar");
pomStream = getClass().getResourceAsStream("artifact-0.0.3.pom");
artifactSHA1Stream = getClass().getResourceAsStream("artifact-0.0.3.jar.sha1");
pomSHA1Stream = getClass().getResourceAsStream("artifact-0.0.3.pom.sha1");
Assert.assertNotNull(metaDataStream);
Assert.assertNotNull(artifactStream);
Assert.assertNotNull(pomStream);
Assert.assertNotNull(artifactSHA1Stream);
Assert.assertNotNull(pomSHA1Stream);
createClientRequest("org/overlord/sramp/test/archive/0.0.3/maven-metadata.xml?artifactType=JavaArchive")
.body("application/octet-stream", metaDataStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.jar?artifactType=JavaArchive")
.body("application/octet-stream", artifactStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.jar.sha1?artifactType=JavaArchive")
.body("application/octet-stream", artifactSHA1Stream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom?artifactType=JavaArchive")
.body("application/octet-stream", pomStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom.sha1?artifactType=JavaArchive")
.body("application/octet-stream", pomSHA1Stream).post();
} finally {
IOUtils.closeQuietly(metaDataStream);
IOUtils.closeQuietly(artifactStream);
IOUtils.closeQuietly(pomStream);
IOUtils.closeQuietly(artifactSHA1Stream);
IOUtils.closeQuietly(pomSHA1Stream);
}
// Now that we've deployed the artifacts, do some queries to make sure we put away
// what we intended.
ArtificerAtomApiClient client = client();
QueryResultSet rset = client.query("/s-ramp/ext/JavaArchive");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp/ext/MavenPom");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp/xsd/XsdDocument");
Assert.assertEquals(3, rset.size());
rset = client.query("/s-ramp/wsdl/WsdlDocument");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp[expandedFromDocument]");
Assert.assertEquals(4, rset.size());
}
/**
* Unit test.
*/
@Test
public void testPushNoSpecifiedTypeUseHints() throws Exception {
InputStream metaDataStream = null;
InputStream artifactStream = null;
InputStream pomStream = null;
InputStream artifactSHA1Stream = null;
InputStream pomSHA1Stream = null;
try {
metaDataStream = getClass().getResourceAsStream("maven-metadata.xml");
artifactStream = getClass().getResourceAsStream("artifact-0.0.3.jar");
pomStream = getClass().getResourceAsStream("artifact-0.0.3.pom");
artifactSHA1Stream = getClass().getResourceAsStream("artifact-0.0.3.jar.sha1");
pomSHA1Stream = getClass().getResourceAsStream("artifact-0.0.3.pom.sha1");
Assert.assertNotNull(metaDataStream);
Assert.assertNotNull(artifactStream);
Assert.assertNotNull(pomStream);
Assert.assertNotNull(artifactSHA1Stream);
Assert.assertNotNull(pomSHA1Stream);
createClientRequest("org/overlord/sramp/test/archive/0.0.3/maven-metadata.xml")
.body("application/octet-stream", metaDataStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.jar")
.body("application/octet-stream", artifactStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.jar.sha1")
.body("application/octet-stream", artifactSHA1Stream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom")
.body("application/octet-stream", pomStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom.sha1")
.body("application/octet-stream", pomSHA1Stream).post();
} finally {
IOUtils.closeQuietly(metaDataStream);
IOUtils.closeQuietly(artifactStream);
IOUtils.closeQuietly(pomStream);
IOUtils.closeQuietly(artifactSHA1Stream);
IOUtils.closeQuietly(pomSHA1Stream);
}
// Now that we've deployed the artifacts, do some queries to make sure we put away
// what we intended.
ArtificerAtomApiClient client = client();
QueryResultSet rset = client.query("/s-ramp/ext/JavaArchive");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp/ext/MavenPom");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp/xsd/XsdDocument");
Assert.assertEquals(3, rset.size());
rset = client.query("/s-ramp/wsdl/WsdlDocument");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp[expandedFromDocument]");
Assert.assertEquals(4, rset.size());
}
/**
* Unit test.
*/
@Test
public void testPushWithArtifactName() throws Exception {
InputStream artifactStream = null;
InputStream pomStream = null;
InputStream artifactSHA1Stream = null;
InputStream pomSHA1Stream = null;
try {
artifactStream = getClass().getResourceAsStream("artifact-0.0.3.jar");
artifactSHA1Stream = getClass().getResourceAsStream("artifact-0.0.3.jar.sha1");
pomStream = getClass().getResourceAsStream("artifact-0.0.3.pom");
pomSHA1Stream = getClass().getResourceAsStream("artifact-0.0.3.pom.sha1");
Assert.assertNotNull(artifactStream);
Assert.assertNotNull(pomStream);
Assert.assertNotNull(artifactSHA1Stream);
Assert.assertNotNull(pomSHA1Stream);
createClientRequest("org/overlord/sramp/test/foo/0.0.3/artifact-0.0.3.jar?artifactType=FooApplication")
.body("application/octet-stream", artifactStream).post();
createClientRequest("org/overlord/sramp/test/foo/0.0.3/artifact-0.0.3.jar.sha1?artifactType=FooApplication")
.body("application/octet-stream", artifactSHA1Stream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom?artifactType=FooApplication")
.body("application/octet-stream", pomStream).post();
createClientRequest("org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom.sha1?artifactType=FooApplication")
.body("application/octet-stream", pomSHA1Stream).post();
} finally {
IOUtils.closeQuietly(artifactStream);
IOUtils.closeQuietly(pomStream);
IOUtils.closeQuietly(artifactSHA1Stream);
IOUtils.closeQuietly(pomSHA1Stream);
}
// Now that we've deployed the artifacts, do some queries to make sure we put away
// what we intended.
ArtificerAtomApiClient client = client();
QueryResultSet rset = client.query("/s-ramp/core/Document");
Assert.assertEquals(0, rset.size());
rset = client.query("/s-ramp/ext/FooApplication");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp/ext/MavenPom");
Assert.assertEquals(1, rset.size());
rset = client.query("/s-ramp[@maven.groupId = 'org.overlord.sramp.test']");
Assert.assertEquals(2, rset.size());
}
/**
* Unit test.
* @throws Exception
*/
@Test
public void testPull() throws Exception {
// First, deploy some maven annotated artifacts
ArtificerAtomApiClient client = client();
InputStream archiveStream = null;
ArtificerArchive archive = null;
try {
archiveStream = getClass().getResourceAsStream("sramp-archive.zip");
archive = new ArtificerArchive(archiveStream);
client.uploadBatch(archive);
} finally {
ArtificerArchive.closeQuietly(archive);
}
String s = (String) createClientRequest(
"org/overlord/sramp/test/archive/maven-metadata.xml").get().getEntity(String.class);
Assert.assertTrue(StringUtils.isNotBlank(s));
s = (String) createClientRequest(
"org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.jar").get().getEntity(String.class);
Assert.assertTrue(StringUtils.isNotBlank(s));
s = (String) createClientRequest(
"org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.jar.sha1").get().getEntity(String.class);
Assert.assertTrue(StringUtils.isNotBlank(s));
s = (String) createClientRequest(
"org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom").get().getEntity(String.class);
Assert.assertTrue(StringUtils.isNotBlank(s));
s = (String) createClientRequest(
"org/overlord/sramp/test/archive/0.0.3/artifact-0.0.3.pom.sha1").get().getEntity(String.class);
Assert.assertTrue(StringUtils.isNotBlank(s));
}
/**
* Verifies that the correct file content was downloaded.
* @param expected
* @param actual
* @throws IOException
*/
private void assertContents(String expected, File actual) throws IOException {
InputStream expectedStream = null;
InputStream actualStream = null;
try {
expectedStream = getClass().getResourceAsStream(expected);
actualStream = FileUtils.openInputStream(actual);
Assert.assertTrue("File contents failed to match: " + actual.getName(),
IOUtils.contentEquals(expectedStream, actualStream));
} finally {
IOUtils.closeQuietly(actualStream);
IOUtils.closeQuietly(expectedStream);
}
}
private ClientRequest createClientRequest(String urlAppend) {
String url = "http://localhost:8080/artificer-server/maven/repository/" + urlAppend;
ClientExecutor executor = createClientExecutor();
ClientRequest request = new ClientRequest(url, executor);
return request;
}
private ClientExecutor createClientExecutor() {
final BasicAuthenticationProvider authProvider = new BasicAuthenticationProvider("admin", "artificer1!");
DefaultHttpClient httpClient = new DefaultHttpClient();
httpClient.addRequestInterceptor(new HttpRequestInterceptor() {
@Override
public void process(HttpRequest request, HttpContext context) throws HttpException, IOException {
authProvider.provideAuthentication(request);
}
});
return new ApacheHttpClient4Executor(httpClient);
}
}