// 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.cloudstack.storage.test; import static org.testng.Assert.assertTrue; import java.util.UUID; import java.util.concurrent.ExecutionException; import javax.inject.Inject; import org.mockito.Matchers; import org.mockito.Mockito; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; import org.apache.cloudstack.engine.subsystem.api.storage.DataObject; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreManager; import org.apache.cloudstack.engine.subsystem.api.storage.DataStoreProvider; import org.apache.cloudstack.engine.subsystem.api.storage.EndPointSelector; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateDataFactory; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateInfo; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService; import org.apache.cloudstack.engine.subsystem.api.storage.TemplateService.TemplateApiResult; import org.apache.cloudstack.framework.async.AsyncCallFuture; import org.apache.cloudstack.storage.LocalHostEndpoint; import org.apache.cloudstack.storage.MockLocalNfsSecondaryStorageResource; import org.apache.cloudstack.storage.datastore.db.ImageStoreDao; import org.apache.cloudstack.storage.datastore.db.ImageStoreVO; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.storage.DataStoreRole; import com.cloud.storage.Storage; import com.cloud.storage.Storage.TemplateType; import com.cloud.storage.VMTemplateVO; import com.cloud.storage.dao.VMTemplateDao; import com.cloud.storage.download.DownloadMonitorImpl; import com.cloud.utils.component.ComponentContext; @ContextConfiguration(locations = {"classpath:/storageContext.xml"}) public class TemplateTest extends CloudStackTestNGBase { @Inject DataCenterDao dcDao; ImageStoreVO imageStore; @Inject ImageStoreDao imageStoreDao; @Inject TemplateService templateSvr; @Inject VMTemplateDao templateDao; @Inject TemplateDataFactory templateFactory; @Inject DataStoreManager dataStoreMgr; @Inject EndPointSelector epSelector; @Inject DownloadMonitorImpl downloadMonitor; long dcId; long templateId; @Test(priority = -1) public void setUp() { ComponentContext.initComponentsLifeCycle(); // create data center DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, true, null, null); dc = dcDao.persist(dc); dcId = dc.getId(); imageStore = new ImageStoreVO(); imageStore.setName("test"); imageStore.setDataCenterId(dcId); imageStore.setProviderName(DataStoreProvider.NFS_IMAGE); imageStore.setRole(DataStoreRole.Image); imageStore.setUrl(this.getSecondaryStorage()); imageStore.setUuid(UUID.randomUUID().toString()); imageStore.setProtocol("nfs"); imageStore = imageStoreDao.persist(imageStore); VMTemplateVO image = new VMTemplateVO(); image.setTemplateType(TemplateType.USER); image.setUrl(this.getTemplateUrl()); image.setUniqueName(UUID.randomUUID().toString()); image.setName(UUID.randomUUID().toString()); image.setPublicTemplate(true); image.setFeatured(true); image.setRequiresHvm(true); image.setBits(64); image.setFormat(Storage.ImageFormat.VHD); image.setEnablePassword(true); image.setEnableSshKey(true); image.setGuestOSId(1); image.setBootable(true); image.setPrepopulate(true); image.setCrossZones(true); image.setExtractable(true); // image.setImageDataStoreId(storeId); image = templateDao.persist(image); templateId = image.getId(); // inject mockito LocalHostEndpoint ep = new LocalHostEndpoint(); ep.setResource(new MockLocalNfsSecondaryStorageResource()); Mockito.when(epSelector.select(Matchers.any(DataObject.class))).thenReturn(ep); Mockito.when(epSelector.select(Matchers.any(DataStore.class))).thenReturn(ep); } @Test public void registerTemplate() { TemplateInfo template = templateFactory.getTemplate(templateId, DataStoreRole.Image); DataStore store = dataStoreMgr.getImageStore(dcId); AsyncCallFuture<TemplateApiResult> future = new AsyncCallFuture<TemplateApiResult>(); templateSvr.createTemplateAsync(template, store, future); try { TemplateApiResult result = future.get(); assertTrue(result.isSuccess(), "failed to register template: " + result.getResult()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); assertTrue(false, e.getMessage()); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); assertTrue(false, e.getMessage()); } } // @Test public void deleteTemplate() { TemplateInfo template = templateFactory.getTemplate(templateId, DataStoreRole.Image); DataStore store = dataStoreMgr.getImageStore(dcId); AsyncCallFuture<TemplateApiResult> future = new AsyncCallFuture<TemplateApiResult>(); templateSvr.deleteTemplateAsync(template); try { TemplateApiResult result = future.get(); assertTrue(result.isSuccess(), "failed to delete template: " + result.getResult()); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); assertTrue(false, e.getMessage()); } catch (ExecutionException e) { // TODO Auto-generated catch block e.printStackTrace(); assertTrue(false, e.getMessage()); } } }