Fix unit test to test NFS template download flow.

This commit is contained in:
Min Chen 2013-05-06 18:02:52 -07:00
parent 0d78209b73
commit f5d5526d41
8 changed files with 63 additions and 25 deletions

View File

@ -140,7 +140,7 @@ public class NfsSecondaryStorageResource extends ServerResourceBase implements S
String _guid;
String _role;
Map<String, Object> _params;
StorageLayer _storage;
protected StorageLayer _storage;
boolean _inSystemVM = false;
boolean _sslCopy = false;

View File

@ -62,6 +62,7 @@ import com.cloud.agent.api.Answer;
import com.cloud.agent.api.storage.DownloadAnswer;
import com.cloud.agent.api.storage.Proxy;
import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.agent.api.to.NfsTO;
import com.cloud.agent.api.to.S3TO;
import com.cloud.exception.InternalErrorException;
import com.cloud.storage.Storage.ImageFormat;
@ -245,6 +246,10 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
this.threadPool = threadPool;
}
public void setStorageLayer(StorageLayer storage){
this._storage = storage;
}
/**
* Get notified of change of job status. Executed in context of downloader
* thread
@ -656,8 +661,16 @@ public class DownloadManagerImpl extends ManagerBase implements DownloadManager
return new DownloadAnswer("Invalid Name", VMTemplateStorageResourceAssoc.Status.DOWNLOAD_ERROR);
}
String installPathPrefix = cmd.getInstallPath();
DataStoreTO dstore = cmd.getDataStore();
String installPathPrefix = cmd.getInstallPath();
// for NFS, we need to get mounted path
if (dstore instanceof NfsTO) {
if (ResourceType.TEMPLATE == resourceType) {
installPathPrefix = resource.getRootDir(cmd) + File.separator + installPathPrefix;
} else {
installPathPrefix = resource.getRootDir(cmd) + File.separator + installPathPrefix;
}
}
String user = null;
String password = null;
if (cmd.getAuth() != null) {

View File

@ -18,10 +18,12 @@ import com.amazonaws.services.s3.model.S3ObjectSummary;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.Command;
import com.cloud.agent.api.storage.DownloadAnswer;
import com.cloud.agent.api.storage.ssCommand;
import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.agent.api.to.NfsTO;
import com.cloud.agent.api.to.S3TO;
import com.cloud.agent.api.to.SwiftTO;
import com.cloud.storage.JavaStorageLayer;
import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
import com.cloud.storage.resource.NfsSecondaryStorageResource;
import com.cloud.storage.template.DownloadManagerImpl;
@ -35,7 +37,17 @@ public class MockLocalNfsSecondaryStorageResource extends
public MockLocalNfsSecondaryStorageResource(){
_dlMgr = new DownloadManagerImpl();
_storage = new JavaStorageLayer();
((DownloadManagerImpl)_dlMgr).setThreadPool(Executors.newFixedThreadPool(10));
((DownloadManagerImpl)_dlMgr).setStorageLayer(_storage);
}
@Override
public String getRootDir(ssCommand cmd) {
return "/mnt";
}
@Override

View File

@ -1,5 +1,7 @@
package org.apache.cloudstack.storage.test;
import static org.testng.Assert.assertTrue;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
@ -8,6 +10,7 @@ import javax.inject.Inject;
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;
@ -15,6 +18,7 @@ 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 org.mockito.Mockito;
@ -34,7 +38,7 @@ 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;
@ -55,7 +59,7 @@ public class TemplateTest extends CloudStackTestNGBase {
DownloadMonitorImpl downloadMonitor;
long dcId;
long templateId;
@Test(priority = -1)
public void setUp() {
ComponentContext.initComponentsLifeCycle();
@ -64,17 +68,17 @@ public class TemplateTest extends CloudStackTestNGBase {
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("CloudStack ImageStore Provider");
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());
@ -93,30 +97,36 @@ public class TemplateTest extends CloudStackTestNGBase {
image.setCrossZones(true);
image.setExtractable(true);
//image.setImageDataStoreId(storeId);
image = templateDao.persist(image);
templateId = image.getId();
Mockito.when(epSelector.select(Mockito.any(DataObject.class))).thenReturn(new LocalHostEndpoint());
//Mockito.when(downloadMonitor.isTemplateUpdateable(Mockito.anyLong(), Mockito.anyLong())).thenReturn(true);
// inject mockito
LocalHostEndpoint ep = new LocalHostEndpoint();
ep.setResource(new MockLocalNfsSecondaryStorageResource());
Mockito.when(epSelector.select(Mockito.any(DataObject.class))).thenReturn(ep);
Mockito.when(epSelector.select(Mockito.any(DataStore.class))).thenReturn(ep);
}
@Test
public void registerTemplate() {
TemplateInfo template = templateFactory.getTemplate(templateId);
DataStore store = dataStoreMgr.getImageStore(dcId);
AsyncCallFuture<TemplateApiResult> future = new AsyncCallFuture<TemplateApiResult>();
templateSvr.createTemplateAsync(template, store, future);
try {
future.get();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
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());
}
}
}

View File

@ -27,7 +27,8 @@
<parameter name="primary-storage-want-to-add" value="nfs://192.168.56.2/opt/storage/primarynfs"/>
<parameter name="devcloud-local-storage-uuid" value="cd10cac1-4772-92e5-5da6-c2bc16b1ce1b"/>
<parameter name="devcloud-host-uuid" value="759ee4c9-a15a-297b-67c6-ac267d8aa429"/>
<parameter name="devcloud-secondary-storage" value="nfs://192.168.56.10/opt/storage/secondary"/>
<!-- <parameter name="devcloud-secondary-storage" value="nfs://192.168.56.10/opt/storage/secondary"/> -->
<parameter name="devcloud-secondary-storage" value="nfs://nfs2.lab.vmops.com:/export/home/edison/secondary" />
<parameter name="s3-accesskey" value="OYAZXCAFUC1DAFOXNJWI"/>
<parameter name="s3-secretkey" value="YHpRtzNDwl12DtrQmwRvdpnf2xK2AeVM30rXxQ=="/>

View File

@ -227,6 +227,7 @@ public class ResourceLimitManagerImpl extends ManagerBase implements ResourceLim
s_logger.trace("Not incrementing resource count for system accounts, returning");
return;
}
long numToIncrement = (delta.length == 0) ? 1 : delta[0].longValue();
if (!updateResourceCountForAccount(accountId, type, true, numToIncrement)) {

View File

@ -99,7 +99,7 @@ public class DownloadListener implements Listener {
public static final Logger s_logger = Logger.getLogger(DownloadListener.class.getName());
public static final int SMALL_DELAY = 100;
public static final long STATUS_POLL_INTERVAL = 10000L;
public static final long STATUS_POLL_INTERVAL = 300000L; //10000L;
public static final String DOWNLOADED=Status.DOWNLOADED.toString();
public static final String NOT_DOWNLOADED=Status.NOT_DOWNLOADED.toString();

View File

@ -198,8 +198,9 @@ public class HypervisorTemplateAdapter extends TemplateAdapterBase implements Te
TemplateInfo template = context.template;
VMTemplateVO tmplt = this._tmpltDao.findById(template.getId());
long accountId = tmplt.getAccountId();
_resourceLimitMgr.incrementResourceCount(accountId, ResourceType.secondary_storage,
template.getSize());
if (template.getSize() != null) {
_resourceLimitMgr.incrementResourceCount(accountId, ResourceType.secondary_storage, template.getSize());
}
return null;
}