/* * 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. */ package org.apache.brooklyn.core.mgmt.persist.jclouds; import java.util.List; import org.apache.brooklyn.core.entity.Entities; import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext; import org.apache.brooklyn.core.mgmt.persist.BrooklynPersistenceUtils; import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore; import org.apache.brooklyn.core.mgmt.persist.PersistenceObjectStore.StoreObjectAccessor; import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests; import org.apache.brooklyn.util.collections.MutableList; import org.apache.brooklyn.util.text.Identifiers; import org.apache.brooklyn.util.time.Duration; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testng.Assert; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; import com.google.common.base.Stopwatch; /** * @author Andrea Turli */ @Test(groups={"Live", "Live-sanity"}) public class JcloudsBlobStoreBasedObjectStoreTest { private static final Logger log = LoggerFactory.getLogger(JcloudsBlobStoreBasedObjectStoreTest.class); private List<PersistenceObjectStore> objectStores = MutableList.of();; private LocalManagementContext mgmt; @BeforeMethod(alwaysRun=true) public void setUp() throws Exception { mgmt = LocalManagementContextForTests.builder(true).useDefaultProperties().build(); } @AfterMethod(alwaysRun=true) public void tearDown() throws Exception { for (PersistenceObjectStore store: objectStores) store.deleteCompletely(); Entities.destroyAll(mgmt); objectStores.clear(); } public PersistenceObjectStore newObjectStore(String spec, String container) { PersistenceObjectStore newObjectStore = BrooklynPersistenceUtils.newPersistenceObjectStore(mgmt, spec, container); objectStores.add(newObjectStore); return newObjectStore; } @Test(groups={"Integration"}) public void testLocalhost() throws Exception { doTestWithStore( newObjectStore(null, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)) ); } @Test(groups={"Integration"}) public void testLocalhostWithSubPathInContainerName() throws Exception { doTestWithStore( newObjectStore(null, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)+"/subpath1/subpath2") ); } @Test(groups={"Live", "Live-sanity"}) public void testJclouds() throws Exception { doTestWithStore( newObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)) ); } @Test(groups={"Live", "Live-sanity"}) public void testJcloudsWithSubPathInContainerName() throws Exception { doTestWithStore( newObjectStore(BlobStoreTest.PERSIST_TO_OBJECT_STORE_FOR_TEST_SPEC, BlobStoreTest.CONTAINER_PREFIX+"-"+Identifiers.makeRandomId(4)+"/subpath1/subpath2") ); } protected void doTestWithStore(PersistenceObjectStore objectStore) { log.info("testing against "+objectStore.getSummaryName()); objectStore.createSubPath("foo"); StoreObjectAccessor f = objectStore.newAccessor("foo/file1.txt"); Assert.assertFalse(f.exists()); Stopwatch timer = Stopwatch.createStarted(); f.append("Hello world"); log.info("created in "+Duration.of(timer)); timer.reset(); Assert.assertEquals(f.get(), "Hello world"); log.info("retrieved in "+Duration.of(timer)); Assert.assertTrue(f.exists()); timer.reset(); List<String> files = objectStore.listContentsWithSubPath("foo"); log.info("list retrieved in "+Duration.of(timer)+"; is: "+files); Assert.assertEquals(files, MutableList.of("foo/file1.txt")); f.delete(); } }