/** * Licensed to jclouds, Inc. (jclouds) under one or more * contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. jclouds 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. */ package org.jclouds.karaf.itests.live; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.openengsb.labs.paxexam.karaf.options.KarafDistributionOption.keepRuntimeFolder; import static org.openengsb.labs.paxexam.karaf.options.KarafDistributionOption.logLevel; import static org.ops4j.pax.exam.CoreOptions.scanFeatures; import java.io.File; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.LinkedHashSet; import java.util.Set; import com.google.common.io.ByteStreams; import com.google.common.io.Closeables; import org.apache.karaf.features.FeaturesService; import org.jclouds.blobstore.BlobStore; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.openengsb.labs.paxexam.karaf.options.LogLevelOption; import org.ops4j.pax.exam.MavenUtils; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.junit.Configuration; import org.ops4j.pax.exam.junit.ExamReactorStrategy; import org.ops4j.pax.exam.junit.JUnit4TestRunner; import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory; import org.osgi.framework.BundleEvent; import org.osgi.framework.BundleListener; @RunWith(JUnit4TestRunner.class) @ExamReactorStrategy(AllConfinedStagedReactorFactory.class) public class CloudFilesUsLiveTest extends JcloudsLiveTestSupport { String group = "karaf"; @Before public void setUp() throws Exception { identity = System.getProperty("jclouds.rackspace.identity"); credential = System.getProperty("jclouds.rackspace.credential"); if (isBlobStoreLiveConfigured()) { installAndCheckFeature("jclouds-commands"); Thread.sleep(DEFAULT_TIMEOUT); } else { System.err.println("Aborting test."); System.err.flush(); } } @After public void tearDown() { if (isBlobStoreLiveConfigured()) { System.err.println(executeCommand("jclouds:blobstore-container-delete itest-container")); } } @Test public void testBlobStoreReadWrite() throws InterruptedException { if (isBlobStoreLiveConfigured()) { createManagedBlobStoreService("cloudfiles-us"); BlobStore blobStoreService = getOsgiService(BlobStore.class); Thread.sleep(DEFAULT_TIMEOUT); String featureURL = System.getProperty("jclouds.featureURL"); System.err.println(executeCommand("jclouds:blobstore-list")); System.err.println(executeCommand("jclouds:blobstore-container-create itest-container")); System.err.println(executeCommand("jclouds:blobstore-write itest-container myfolder/myfile "+ featureURL )); System.err.println(executeCommand("jclouds:blobstore-write --url-payload itest-container "+ System.getProperty("jclouds.featureURL"))); System.err.println(executeCommand("jclouds:blobstore-read --display itest-container testblob ")); } } @Test public void testUrlHandler() throws Exception { if (isBlobStoreLiveConfigured()) { createManagedBlobStoreService("cloudfiles-us"); BlobStore blobStoreService = getOsgiService(BlobStore.class); Thread.sleep(DEFAULT_TIMEOUT); FeaturesService featuresService = getOsgiService(FeaturesService.class); featuresService.installFeature("jclouds-url-handler"); //Let's add a bundle to S3 String groupId = "org.jclouds.api"; String artifactId = "byon"; String version = System.getProperty("jclouds.version"); System.err.println(executeCommand("jclouds:blobstore-list")); System.err.println(executeCommand("jclouds:blobstore-container-create itest-container")); URL artifactUrl = new URL("mvn:"+groupId+"/"+artifactId+"/"+version); URL blobUrl = new URL("blob:aws-s3/itest-container/maven2/org/jclouds/api/byon/" +version+"/"+artifactId+"-"+version+".jar" ); InputStream is = artifactUrl.openConnection().getInputStream(); OutputStream os = blobUrl.openConnection().getOutputStream(); try { ByteStreams.copy(is, os); } finally { Closeables.closeQuietly(is); Closeables.closeQuietly(os); } //Make sure that only S3 is available as a repo. System.err.println(executeCommands("config:edit org.ops4j.pax.url.mvn", "config:propset org.ops4j.pax.url.mvn.localRepository " + System.getProperty("karaf.base") + File.separatorChar + "none", "config:propset org.ops4j.pax.url.mvn.repositories blob:cloudfiles-us/itest-container/maven2@snapshots ", "config:update")); Thread.sleep(DEFAULT_TIMEOUT); final Set<String> installedSymbolicNames = new LinkedHashSet<String>(); //Add a Bundle Listener bundleContext.addBundleListener(new BundleListener(){ @Override public void bundleChanged(BundleEvent event) { if (event.getType() == BundleEvent.INSTALLED) { installedSymbolicNames.add(event.getBundle().getSymbolicName()); } } }); //Install the bundle the from S3. System.err.println(executeCommand("osgi:install mvn:org.jclouds.api/byon/" + version)); //Verify that no other bundle can be installed. System.err.println(executeCommand("osgi:install mvn:org.jclouds.api/nova/" + version)); assertTrue(installedSymbolicNames.contains("byon")); assertFalse(installedSymbolicNames.contains("nova")); } } @Configuration public Option[] config() { return new Option[]{ jcloudsDistributionConfiguration(), keepRuntimeFolder(), logLevel(LogLevelOption.LogLevel.ERROR), systemProperty("jclouds.rackspace.identity"), systemProperty("jclouds.rackspace.credential"), systemProperty("jclouds.karaf.version",MavenUtils.getArtifactVersion(JCLOUDS_KARAF_GROUP_ID, JCLOUDS_KARAF_ARTIFACT_ID)), systemProperty("jclouds.version",MavenUtils.getArtifactVersion(JCLOUDS_GROUP_ID, JCLOUDS_ARTIFACT_ID)), systemProperty("jclouds.featureURL",String.format(JCLOUDS_FEATURE_FORMAT, MavenUtils.getArtifactVersion(JCLOUDS_KARAF_GROUP_ID, JCLOUDS_KARAF_ARTIFACT_ID))), scanFeatures(String.format(JCLOUDS_FEATURE_FORMAT, MavenUtils.getArtifactVersion(JCLOUDS_KARAF_GROUP_ID, JCLOUDS_KARAF_ARTIFACT_ID)),"jclouds", "jclouds-commands", "jclouds-cloudfiles-us").start() }; } }