You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by mc...@apache.org on 2014/02/07 22:46:11 UTC
[02/50] [abbrv] Moved the secondary storage service into its own
server directory
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4be3b993/services/secondary-storage/src/org/apache/cloudstack/storage/template/UploadManagerImpl.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/template/UploadManagerImpl.java b/services/secondary-storage/src/org/apache/cloudstack/storage/template/UploadManagerImpl.java
deleted file mode 100755
index cdbc52d..0000000
--- a/services/secondary-storage/src/org/apache/cloudstack/storage/template/UploadManagerImpl.java
+++ /dev/null
@@ -1,550 +0,0 @@
-// 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.template;
-
-import java.io.File;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-
-import org.apache.cloudstack.storage.resource.SecondaryStorageResource;
-
-import com.cloud.agent.api.storage.CreateEntityDownloadURLAnswer;
-import com.cloud.agent.api.storage.CreateEntityDownloadURLCommand;
-import com.cloud.agent.api.storage.DeleteEntityDownloadURLAnswer;
-import com.cloud.agent.api.storage.DeleteEntityDownloadURLCommand;
-import com.cloud.agent.api.storage.UploadAnswer;
-import com.cloud.agent.api.storage.UploadCommand;
-import com.cloud.agent.api.storage.UploadProgressCommand;
-import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.StorageLayer;
-import com.cloud.storage.Upload;
-import com.cloud.storage.UploadVO;
-import com.cloud.storage.template.FtpTemplateUploader;
-import com.cloud.storage.template.TemplateUploader;
-import com.cloud.storage.template.TemplateUploader.Status;
-import com.cloud.storage.template.TemplateUploader.UploadCompleteCallback;
-import com.cloud.utils.NumbersUtil;
-import com.cloud.utils.component.ManagerBase;
-import com.cloud.utils.exception.CloudRuntimeException;
-import com.cloud.utils.script.Script;
-
-public class UploadManagerImpl extends ManagerBase implements UploadManager {
-
- public class Completion implements UploadCompleteCallback {
- private final String jobId;
-
- public Completion(String jobId) {
- this.jobId = jobId;
- }
-
- @Override
- public void uploadComplete(Status status) {
- setUploadStatus(jobId, status);
- }
- }
-
- private static class UploadJob {
- private final TemplateUploader tu;
-
- public UploadJob(TemplateUploader tu, String jobId, long id, String name, ImageFormat format, boolean hvm, Long accountId, String descr, String cksum,
- String installPathPrefix) {
- super();
- this.tu = tu;
- }
-
- public TemplateUploader getTemplateUploader() {
- return tu;
- }
-
- public void cleanup() {
- if (tu != null) {
- String upldPath = tu.getUploadLocalPath();
- if (upldPath != null) {
- File f = new File(upldPath);
- f.delete();
- }
- }
- }
-
- }
-
- public static final Logger s_logger = Logger.getLogger(UploadManagerImpl.class);
- private ExecutorService threadPool;
- private final Map<String, UploadJob> jobs = new ConcurrentHashMap<String, UploadJob>();
- private String parentDir;
- private final String extractMountPoint = "/mnt/SecStorage/extractmnt";
- private StorageLayer _storage;
- private boolean hvm;
-
- @Override
- public String uploadPublicTemplate(long id, String url, String name, ImageFormat format, Long accountId, String descr, String cksum, String installPathPrefix,
- String userName, String passwd, long templateSizeInBytes) {
-
- UUID uuid = UUID.randomUUID();
- String jobId = uuid.toString();
-
- String completePath = parentDir + File.separator + installPathPrefix;
- s_logger.debug("Starting upload from " + completePath);
-
- URI uri;
- try {
- uri = new URI(url);
- } catch (URISyntaxException e) {
- s_logger.error("URI is incorrect: " + url);
- throw new CloudRuntimeException("URI is incorrect: " + url);
- }
- TemplateUploader tu;
- if ((uri != null) && (uri.getScheme() != null)) {
- if (uri.getScheme().equalsIgnoreCase("ftp")) {
- tu = new FtpTemplateUploader(completePath, url, new Completion(jobId), templateSizeInBytes);
- } else {
- s_logger.error("Scheme is not supported " + url);
- throw new CloudRuntimeException("Scheme is not supported " + url);
- }
- } else {
- s_logger.error("Unable to download from URL: " + url);
- throw new CloudRuntimeException("Unable to download from URL: " + url);
- }
- UploadJob uj = new UploadJob(tu, jobId, id, name, format, hvm, accountId, descr, cksum, installPathPrefix);
- jobs.put(jobId, uj);
- threadPool.execute(tu);
-
- return jobId;
-
- }
-
- @Override
- public String getUploadError(String jobId) {
- UploadJob uj = jobs.get(jobId);
- if (uj != null) {
- return uj.getTemplateUploader().getUploadError();
- }
- return null;
- }
-
- @Override
- public int getUploadPct(String jobId) {
- UploadJob uj = jobs.get(jobId);
- if (uj != null) {
- return uj.getTemplateUploader().getUploadPercent();
- }
- return 0;
- }
-
- @Override
- public Status getUploadStatus(String jobId) {
- UploadJob job = jobs.get(jobId);
- if (job != null) {
- TemplateUploader tu = job.getTemplateUploader();
- if (tu != null) {
- return tu.getStatus();
- }
- }
- return Status.UNKNOWN;
- }
-
- public static UploadVO.Status convertStatus(Status tds) {
- switch (tds) {
- case ABORTED:
- return UploadVO.Status.NOT_UPLOADED;
- case UPLOAD_FINISHED:
- return UploadVO.Status.UPLOAD_IN_PROGRESS;
- case IN_PROGRESS:
- return UploadVO.Status.UPLOAD_IN_PROGRESS;
- case NOT_STARTED:
- return UploadVO.Status.NOT_UPLOADED;
- case RECOVERABLE_ERROR:
- return UploadVO.Status.NOT_UPLOADED;
- case UNKNOWN:
- return UploadVO.Status.UNKNOWN;
- case UNRECOVERABLE_ERROR:
- return UploadVO.Status.UPLOAD_ERROR;
- case POST_UPLOAD_FINISHED:
- return UploadVO.Status.UPLOADED;
- default:
- return UploadVO.Status.UNKNOWN;
- }
- }
-
- @Override
- public com.cloud.storage.UploadVO.Status getUploadStatus2(String jobId) {
- return convertStatus(getUploadStatus(jobId));
- }
-
- @Override
- public String getPublicTemplateRepo() {
- // TODO Auto-generated method stub
- return null;
- }
-
- private UploadAnswer handleUploadProgressCmd(UploadProgressCommand cmd) {
- String jobId = cmd.getJobId();
- UploadAnswer answer;
- UploadJob uj = null;
- if (jobId != null)
- uj = jobs.get(jobId);
- if (uj == null) {
- return new UploadAnswer(null, 0, "Cannot find job", com.cloud.storage.UploadVO.Status.UNKNOWN, "", "", 0);
- }
- TemplateUploader td = uj.getTemplateUploader();
- switch (cmd.getRequest()) {
- case GET_STATUS:
- break;
- case ABORT:
- td.stopUpload();
- sleep();
- break;
- /*case RESTART:
- td.stopUpload();
- sleep();
- threadPool.execute(td);
- break;*/
- case PURGE:
- td.stopUpload();
- answer =
- new UploadAnswer(jobId, getUploadPct(jobId), getUploadError(jobId), getUploadStatus2(jobId), getUploadLocalPath(jobId), getInstallPath(jobId),
- getUploadTemplateSize(jobId));
- jobs.remove(jobId);
- return answer;
- default:
- break; // TODO
- }
- return new UploadAnswer(jobId, getUploadPct(jobId), getUploadError(jobId), getUploadStatus2(jobId), getUploadLocalPath(jobId), getInstallPath(jobId),
- getUploadTemplateSize(jobId));
- }
-
- @Override
- public UploadAnswer handleUploadCommand(SecondaryStorageResource resource, UploadCommand cmd) {
- s_logger.warn("Handling the upload " + cmd.getInstallPath() + " " + cmd.getId());
- if (cmd instanceof UploadProgressCommand) {
- return handleUploadProgressCmd((UploadProgressCommand)cmd);
- }
-
- String user = null;
- String password = null;
- String jobId =
- uploadPublicTemplate(cmd.getId(), cmd.getUrl(), cmd.getName(), cmd.getFormat(), cmd.getAccountId(), cmd.getDescription(), cmd.getChecksum(),
- cmd.getInstallPath(), user, password, cmd.getTemplateSizeInBytes());
- sleep();
- return new UploadAnswer(jobId, getUploadPct(jobId), getUploadError(jobId), getUploadStatus2(jobId), getUploadLocalPath(jobId), getInstallPath(jobId),
- getUploadTemplateSize(jobId));
- }
-
- @Override
- public CreateEntityDownloadURLAnswer handleCreateEntityURLCommand(CreateEntityDownloadURLCommand cmd) {
-
- boolean isApacheUp = checkAndStartApache();
- if (!isApacheUp) {
- String errorString = "Error in starting Apache server ";
- s_logger.error(errorString);
- return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE);
- }
- // Create the directory structure so that its visible under apache server root
- String extractDir = "/var/www/html/userdata/";
- Script command = new Script("mkdir", s_logger);
- command.add("-p");
- command.add(extractDir);
- String result = command.execute();
- if (result != null) {
- String errorString = "Error in creating directory =" + result;
- s_logger.error(errorString);
- return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE);
- }
-
- // Create a random file under the directory for security reasons.
- String uuid = cmd.getExtractLinkUUID();
- command = new Script("touch", s_logger);
- command.add(extractDir + uuid);
- result = command.execute();
- if (result != null) {
- String errorString = "Error in creating file " + uuid + " ,error: " + result;
- s_logger.warn(errorString);
- return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE);
- }
-
- // Create a symbolic link from the actual directory to the template location. The entity would be directly visible under /var/www/html/userdata/cmd.getInstallPath();
- command = new Script("/bin/bash", s_logger);
- command.add("-c");
- command.add("ln -sf /mnt/SecStorage/" + cmd.getParent() + File.separator + cmd.getInstallPath() + " " + extractDir + uuid);
- result = command.execute();
- if (result != null) {
- String errorString = "Error in linking err=" + result;
- s_logger.error(errorString);
- return new CreateEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE);
- }
-
- return new CreateEntityDownloadURLAnswer("", CreateEntityDownloadURLAnswer.RESULT_SUCCESS);
-
- }
-
- @Override
- public DeleteEntityDownloadURLAnswer handleDeleteEntityDownloadURLCommand(DeleteEntityDownloadURLCommand cmd) {
-
- //Delete the soft link. Example path = volumes/8/74eeb2c6-8ab1-4357-841f-2e9d06d1f360.vhd
- s_logger.warn("handleDeleteEntityDownloadURLCommand Path:" + cmd.getPath() + " Type:" + cmd.getType().toString());
- String path = cmd.getPath();
- Script command = new Script("/bin/bash", s_logger);
- command.add("-c");
-
- //We just need to remove the UUID.vhd
- String extractUrl = cmd.getExtractUrl();
- command.add("unlink /var/www/html/userdata/" + extractUrl.substring(extractUrl.lastIndexOf(File.separator) + 1));
- String result = command.execute();
- if (result != null) {
- String errorString = "Error in deleting =" + result;
- s_logger.warn(errorString);
- return new DeleteEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE);
- }
-
- // If its a volume also delete the Hard link since it was created only for the purpose of download.
- if (cmd.getType() == Upload.Type.VOLUME) {
- command = new Script("/bin/bash", s_logger);
- command.add("-c");
- command.add("rm -f /mnt/SecStorage/" + cmd.getParentPath() + File.separator + path);
- s_logger.warn(" " + parentDir + File.separator + path);
- result = command.execute();
- if (result != null) {
- String errorString = "Error in linking err=" + result;
- s_logger.warn(errorString);
- return new DeleteEntityDownloadURLAnswer(errorString, CreateEntityDownloadURLAnswer.RESULT_FAILURE);
- }
- }
-
- return new DeleteEntityDownloadURLAnswer("", CreateEntityDownloadURLAnswer.RESULT_SUCCESS);
- }
-
- private String getInstallPath(String jobId) {
- // TODO Auto-generated method stub
- return null;
- }
-
- private String getUploadLocalPath(String jobId) {
- // TODO Auto-generated method stub
- return null;
- }
-
- private long getUploadTemplateSize(String jobId) {
- return 0;
- }
-
- @SuppressWarnings("unchecked")
- @Override
- public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
-
- String value = null;
-
- _storage = (StorageLayer)params.get(StorageLayer.InstanceConfigKey);
- if (_storage == null) {
- value = (String)params.get(StorageLayer.ClassConfigKey);
- if (value == null) {
- throw new ConfigurationException("Unable to find the storage layer");
- }
-
- Class<StorageLayer> clazz;
- try {
- clazz = (Class<StorageLayer>)Class.forName(value);
- _storage = clazz.newInstance();
- } catch (ClassNotFoundException e) {
- throw new ConfigurationException("Unable to instantiate " + value);
- } catch (InstantiationException e) {
- throw new ConfigurationException("Unable to instantiate " + value);
- } catch (IllegalAccessException e) {
- throw new ConfigurationException("Unable to instantiate " + value);
- }
- }
-
- String inSystemVM = (String)params.get("secondary.storage.vm");
- if (inSystemVM != null && "true".equalsIgnoreCase(inSystemVM)) {
- s_logger.info("UploadManager: starting additional services since we are inside system vm");
- startAdditionalServices();
- //blockOutgoingOnPrivate();
- }
-
- value = (String)params.get("install.numthreads");
- final int numInstallThreads = NumbersUtil.parseInt(value, 10);
-
- String scriptsDir = (String)params.get("template.scripts.dir");
- if (scriptsDir == null) {
- scriptsDir = "scripts/storage/secondary";
- }
-
- // Add more processors here.
- threadPool = Executors.newFixedThreadPool(numInstallThreads);
-
- return true;
- }
-
- private void startAdditionalServices() {
-
- Script command = new Script("rm", s_logger);
- command.add("-rf");
- command.add(extractMountPoint);
- String result = command.execute();
- if (result != null) {
- s_logger.warn("Error in creating file " + extractMountPoint + " ,error: " + result);
- return;
- }
-
- command = new Script("touch", s_logger);
- command.add(extractMountPoint);
- result = command.execute();
- if (result != null) {
- s_logger.warn("Error in creating file " + extractMountPoint + " ,error: " + result);
- return;
- }
-
- command = new Script("/bin/bash", s_logger);
- command.add("-c");
- command.add("ln -sf " + parentDir + " " + extractMountPoint);
- result = command.execute();
- if (result != null) {
- s_logger.warn("Error in linking err=" + result);
- return;
- }
-
- }
-
- /**
- * Get notified of change of job status. Executed in context of uploader thread
- *
- * @param jobId
- * the id of the job
- * @param status
- * the status of the job
- */
- public void setUploadStatus(String jobId, Status status) {
- UploadJob uj = jobs.get(jobId);
- if (uj == null) {
- s_logger.warn("setUploadStatus for jobId: " + jobId + ", status=" + status + " no job found");
- return;
- }
- TemplateUploader tu = uj.getTemplateUploader();
- s_logger.warn("Upload Completion for jobId: " + jobId + ", status=" + status);
- s_logger.warn("UploadedBytes=" + tu.getUploadedBytes() + ", error=" + tu.getUploadError() + ", pct=" + tu.getUploadPercent());
-
- switch (status) {
- case ABORTED:
- case NOT_STARTED:
- case UNRECOVERABLE_ERROR:
- // Delete the entity only if its a volume. TO DO - find a better way of finding it a volume.
- if (uj.getTemplateUploader().getUploadLocalPath().indexOf("volume") > -1) {
- uj.cleanup();
- }
- break;
- case UNKNOWN:
- return;
- case IN_PROGRESS:
- s_logger.info("Resuming jobId: " + jobId + ", status=" + status);
- tu.setResume(true);
- threadPool.execute(tu);
- break;
- case RECOVERABLE_ERROR:
- threadPool.execute(tu);
- break;
- case UPLOAD_FINISHED:
- tu.setUploadError("Upload success, starting install ");
- String result = postUpload(jobId);
- if (result != null) {
- s_logger.error("Failed post upload script: " + result);
- tu.setStatus(Status.UNRECOVERABLE_ERROR);
- tu.setUploadError("Failed post upload script: " + result);
- } else {
- s_logger.warn("Upload completed successfully at " + new SimpleDateFormat().format(new Date()));
- tu.setStatus(Status.POST_UPLOAD_FINISHED);
- tu.setUploadError("Upload completed successfully at " + new SimpleDateFormat().format(new Date()));
- }
- // Delete the entity only if its a volume. TO DO - find a better way of finding it a volume.
- if (uj.getTemplateUploader().getUploadLocalPath().indexOf("volume") > -1) {
- uj.cleanup();
- }
- break;
- default:
- break;
- }
- }
-
- private String postUpload(String jobId) {
- return null;
- }
-
- private void sleep() {
- try {
- Thread.sleep(3000);
- } catch (InterruptedException e) {
- // ignore
- }
- }
-
- private boolean checkAndStartApache() {
-
- //Check whether the Apache server is running
- Script command = new Script("/bin/bash", s_logger);
- command.add("-c");
- command.add("if [ -d /etc/apache2 ] ; then service apache2 status | grep pid; else service httpd status | grep pid; fi ");
- String result = command.execute();
-
- //Apache Server is not running. Try to start it.
- if (result != null) {
-
- /*s_logger.warn("Apache server not running, trying to start it");
- String port = Integer.toString(TemplateConstants.DEFAULT_TMPLT_COPY_PORT);
- String intf = TemplateConstants.DEFAULT_TMPLT_COPY_INTF;
-
- command = new Script("/bin/bash", s_logger);
- command.add("-c");
- command.add("iptables -D INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j DROP;" +
- "iptables -D INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j HTTP;" +
- "iptables -D INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j DROP;" +
- "iptables -D INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j HTTP;" +
- "iptables -F HTTP;" +
- "iptables -X HTTP;" +
- "iptables -N HTTP;" +
- "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j DROP;" +
- "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j DROP;" +
- "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + port + " -j HTTP;" +
- "iptables -I INPUT -i " + intf + " -p tcp -m state --state NEW -m tcp --dport " + "443" + " -j HTTP;");
-
- result = command.execute();
- if (result != null) {
- s_logger.warn("Error in opening up httpd port err=" + result );
- return false;
- }*/
-
- command = new Script("/bin/bash", s_logger);
- command.add("-c");
- command.add("if [ -d /etc/apache2 ] ; then service apache2 start; else service httpd start; fi ");
- result = command.execute();
- if (result != null) {
- s_logger.warn("Error in starting httpd service err=" + result);
- return false;
- }
- }
-
- return true;
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4be3b993/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
deleted file mode 100644
index e0fcbae..0000000
--- a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/LocalNfsSecondaryStorageResourceTest.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- * 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.resource;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.Map;
-import java.util.Properties;
-import java.util.UUID;
-
-import javax.naming.ConfigurationException;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.apache.log4j.Logger;
-import org.junit.Before;
-import org.junit.Test;
-import org.mockito.Mockito;
-
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.command.DownloadCommand;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-
-import com.cloud.agent.api.storage.DownloadAnswer;
-import com.cloud.agent.api.storage.ListTemplateAnswer;
-import com.cloud.agent.api.storage.ListTemplateCommand;
-import com.cloud.agent.api.to.DataObjectType;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.SwiftTO;
-import com.cloud.storage.DataStoreRole;
-import com.cloud.storage.Storage;
-import com.cloud.utils.PropertiesUtil;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-public class LocalNfsSecondaryStorageResourceTest extends TestCase {
- private static Map<String, Object> testParams;
-
- private static final Logger s_logger = Logger.getLogger(LocalNfsSecondaryStorageResourceTest.class.getName());
-
- LocalNfsSecondaryStorageResource resource;
-
- @Before
- @Override
- public void setUp() throws ConfigurationException {
- resource = new LocalNfsSecondaryStorageResource();
- resource.setInSystemVM(true);
-
- testParams = PropertiesUtil.toMap(loadProperties());
- resource.configureStorageLayerClass(testParams);
- Object testLocalRoot = testParams.get("testLocalRoot");
- resource.setParentPath("/mnt");
-
- if (testLocalRoot != null) {
- resource.setParentPath((String)testLocalRoot);
- }
-
- System.setProperty("paths.script", "/Users/edison/develop/asf-master/script");
- //resource.configure("test", new HashMap<String, Object>());
- }
-
- @Test
- public void testExecuteRequest() throws Exception {
- TemplateObjectTO template = Mockito.mock(TemplateObjectTO.class);
- NfsTO cacheStore = Mockito.mock(NfsTO.class);
- Mockito.when(cacheStore.getUrl()).thenReturn("nfs://nfs2.lab.vmops.com/export/home/edison/");
- SwiftTO swift = Mockito.mock(SwiftTO.class);
- Mockito.when(swift.getEndPoint()).thenReturn("https://objects.dreamhost.com/auth");
- Mockito.when(swift.getAccount()).thenReturn("cloudstack");
- Mockito.when(swift.getUserName()).thenReturn("images");
- Mockito.when(swift.getKey()).thenReturn("oxvELQaOD1U5_VyosGfA-wpZ7uBWEff-CUBGCM0u");
-
- Mockito.when(template.getDataStore()).thenReturn(swift);
- Mockito.when(template.getPath()).thenReturn("template/1/1/");
- Mockito.when(template.isRequiresHvm()).thenReturn(true);
- Mockito.when(template.getId()).thenReturn(1L);
- Mockito.when(template.getFormat()).thenReturn(Storage.ImageFormat.VHD);
- Mockito.when(template.getOrigUrl()).thenReturn("http://nfs1.lab.vmops.com/templates/test.bz2");
- Mockito.when(template.getName()).thenReturn(UUID.randomUUID().toString());
- Mockito.when(template.getObjectType()).thenReturn(DataObjectType.TEMPLATE);
-
- DownloadCommand cmd = new DownloadCommand(template, 100000L);
- cmd.setCacheStore(cacheStore);
- DownloadAnswer answer = (DownloadAnswer)resource.executeRequest(cmd);
- Assert.assertTrue(answer.getResult());
-
- Mockito.when(template.getPath()).thenReturn(answer.getInstallPath());
- Mockito.when(template.getDataStore()).thenReturn(swift);
- //download swift:
- Mockito.when(cacheStore.getRole()).thenReturn(DataStoreRole.ImageCache);
- TemplateObjectTO destTemplate = Mockito.mock(TemplateObjectTO.class);
- Mockito.when(destTemplate.getPath()).thenReturn("template/1/2");
- Mockito.when(destTemplate.getDataStore()).thenReturn(cacheStore);
- Mockito.when(destTemplate.getObjectType()).thenReturn(DataObjectType.TEMPLATE);
- CopyCommand cpyCmd = new CopyCommand(template, destTemplate, 10000, true);
- CopyCmdAnswer copyCmdAnswer = (CopyCmdAnswer)resource.executeRequest(cpyCmd);
- Assert.assertTrue(copyCmdAnswer.getResult());
-
- //list template
- ListTemplateCommand listCmd = new ListTemplateCommand(swift);
- ListTemplateAnswer listAnswer = (ListTemplateAnswer)resource.executeRequest(listCmd);
-
- Assert.assertTrue(listAnswer.getTemplateInfo().size() > 0);
- }
-
- public static Properties loadProperties() throws ConfigurationException {
- Properties properties = new Properties();
- final File file = PropertiesUtil.findConfigFile("agent.properties");
- if (file == null) {
- throw new ConfigurationException("Unable to find agent.properties.");
- }
-
- s_logger.info("agent.properties found at " + file.getAbsolutePath());
-
- try {
- properties.load(new FileInputStream(file));
- } catch (final FileNotFoundException ex) {
- throw new CloudRuntimeException("Cannot find the file: " + file.getAbsolutePath(), ex);
- } catch (final IOException ex) {
- throw new CloudRuntimeException("IOException in reading " + file.getAbsolutePath(), ex);
- }
- return properties;
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/4be3b993/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java b/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
deleted file mode 100644
index e0ae4c5..0000000
--- a/services/secondary-storage/test/org/apache/cloudstack/storage/resource/NfsSecondaryStorageResourceTest.java
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * 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.resource;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.net.URI;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.naming.ConfigurationException;
-
-import junit.framework.Assert;
-import junit.framework.TestCase;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.junit.Before;
-import org.junit.Test;
-
-import com.cloud.utils.PropertiesUtil;
-import com.cloud.utils.exception.CloudRuntimeException;
-
-public class NfsSecondaryStorageResourceTest extends TestCase {
- private static Map<String, Object> testParams;
-
- private static final Logger s_logger = Logger.getLogger(NfsSecondaryStorageResourceTest.class.getName());
-
- NfsSecondaryStorageResource resource;
-
- @Before
- @Override
- public void setUp() throws ConfigurationException {
- s_logger.setLevel(Level.ALL);
- resource = new NfsSecondaryStorageResource();
- resource.setInSystemVM(true);
- testParams = PropertiesUtil.toMap(loadProperties());
- resource.configureStorageLayerClass(testParams);
- Object testLocalRoot = testParams.get("testLocalRoot");
- if (testLocalRoot != null) {
- resource.setParentPath((String)testLocalRoot);
- }
- }
-
- @Test
- public void testMount() throws Exception {
- String sampleUriStr = "cifs://192.168.1.128/CSHV3?user=administrator&password=1pass%40word1&foo=bar";
- URI sampleUri = new URI(sampleUriStr);
-
- s_logger.info("Check HostIp parsing");
- String hostIpStr = resource.getUriHostIp(sampleUri);
- Assert.assertEquals("Expected host IP " + sampleUri.getHost() + " and actual host IP " + hostIpStr + " differ.", sampleUri.getHost(), hostIpStr);
-
- s_logger.info("Check option parsing");
- String expected = "user=administrator,password=1pass@word1,foo=bar,";
- String actualOpts = resource.parseCifsMountOptions(sampleUri);
- Assert.assertEquals("Options should be " + expected + " and not " + actualOpts, expected, actualOpts);
-
- // attempt a configured mount
- final Map<String, Object> params = PropertiesUtil.toMap(loadProperties());
- String sampleMount = (String)params.get("testCifsMount");
- if (!sampleMount.isEmpty()) {
- s_logger.info("functional test, mount " + sampleMount);
- URI realMntUri = new URI(sampleMount);
- String mntSubDir = resource.mountUri(realMntUri);
- s_logger.info("functional test, umount " + mntSubDir);
- resource.umount(resource.getMountingRoot() + mntSubDir, realMntUri);
- } else {
- s_logger.info("no entry for testCifsMount in " + "./conf/agent.properties - skip functional test");
- }
- }
-
- public static Properties loadProperties() throws ConfigurationException {
- Properties properties = new Properties();
- final File file = PropertiesUtil.findConfigFile("agent.properties");
- if (file == null) {
- throw new ConfigurationException("Unable to find agent.properties.");
- }
-
- s_logger.info("agent.properties found at " + file.getAbsolutePath());
-
- try {
- properties.load(new FileInputStream(file));
- } catch (final FileNotFoundException ex) {
- throw new CloudRuntimeException("Cannot find the file: " + file.getAbsolutePath(), ex);
- } catch (final IOException ex) {
- throw new CloudRuntimeException("IOException in reading " + file.getAbsolutePath(), ex);
- }
- return properties;
- }
-
-}