You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2015/04/02 20:23:04 UTC
[23/39] git commit: updated refs/heads/master to 3e28747
Refactoring GetStorageStatsCommand and PrimaryStorageDownloadCommand to cope with the new design
Fix the NPE in the constructor that was never used
- Basic tests added for all changes
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/11d03368
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/11d03368
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/11d03368
Branch: refs/heads/master
Commit: 11d0336803048b156731da15239147e7f6b4d03a
Parents: ea374b6
Author: wilderrodrigues <wr...@schubergphilis.com>
Authored: Tue Mar 24 18:04:39 2015 +0100
Committer: wilderrodrigues <wr...@schubergphilis.com>
Committed: Tue Mar 31 10:38:29 2015 +0200
----------------------------------------------------------------------
.../api/storage/AbstractDownloadCommand.java | 18 ++---
.../storage/PrimaryStorageDownloadCommand.java | 25 ++----
.../xenserver/resource/CitrixResourceBase.java | 14 +---
.../CitrixGetStorageStatsCommandWrapper.java | 69 ++++++++++++++++
...rixPrimaryStorageDownloadCommandWrapper.java | 83 ++++++++++++++++++++
.../resource/wrapper/CitrixRequestWrapper.java | 4 +
.../wrapper/CitrixRequestWrapperTest.java | 40 ++++++++++
7 files changed, 217 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java b/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
index 0bde5e3..0670eef 100644
--- a/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
+++ b/core/src/com/cloud/agent/api/storage/AbstractDownloadCommand.java
@@ -31,8 +31,8 @@ public abstract class AbstractDownloadCommand extends SsCommand {
protected AbstractDownloadCommand() {
}
- protected AbstractDownloadCommand(String name, String url, ImageFormat format, Long accountId) {
- assert (url != null);
+ protected AbstractDownloadCommand(final String name, String url, final ImageFormat format, final Long accountId) {
+ assert url != null;
url = url.replace('\\', '/');
this.url = url;
@@ -41,14 +41,14 @@ public abstract class AbstractDownloadCommand extends SsCommand {
this.name = name;
}
- protected AbstractDownloadCommand(AbstractDownloadCommand that) {
+ protected AbstractDownloadCommand(final AbstractDownloadCommand that) {
super(that);
- assert (that.url != null);
+ assert that.url != null;
- this.url = that.url.replace('\\', '/');
- this.format = that.format;
- this.accountId = that.accountId;
- this.name = that.name;
+ url = that.url.replace('\\', '/');
+ format = that.format;
+ accountId = that.accountId;
+ name = that.name;
}
public String getUrl() {
@@ -73,7 +73,7 @@ public abstract class AbstractDownloadCommand extends SsCommand {
}
public void setUrl(String url) {
- assert (url != null);
+ assert url != null;
url = url.replace('\\', '/');
this.url = url;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
----------------------------------------------------------------------
diff --git a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java b/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
index f8b88c9..ce8ed21 100644
--- a/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
+++ b/core/src/com/cloud/agent/api/storage/PrimaryStorageDownloadCommand.java
@@ -37,22 +37,13 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand {
String primaryStorageUrl;
protected PrimaryStorageDownloadCommand() {
-
- }
-
- public PrimaryStorageDownloadCommand(String url, StoragePool pool, int wait) {
- super(null, url, null, null);
- this.poolId = pool.getId();
- this.poolUuid = pool.getUuid();
- this.primaryPool = new StorageFilerTO(pool);
- setWait(wait);
}
- public PrimaryStorageDownloadCommand(String name, String url, ImageFormat format, long accountId, StoragePool pool, int wait) {
+ public PrimaryStorageDownloadCommand(final String name, final String url, final ImageFormat format, final long accountId, final StoragePool pool, final int wait) {
super(name, url, format, accountId);
- this.poolId = pool.getId();
- this.poolUuid = pool.getUuid();
- this.primaryPool = new StorageFilerTO(pool);
+ poolId = pool.getId();
+ poolUuid = pool.getUuid();
+ primaryPool = new StorageFilerTO(pool);
setWait(wait);
}
@@ -68,15 +59,15 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand {
return primaryPool;
}
- public void setLocalPath(String path) {
- this.localPath = path;
+ public void setLocalPath(final String path) {
+ localPath = path;
}
public String getLocalPath() {
return localPath;
}
- public void setSecondaryStorageUrl(String url) {
+ public void setSecondaryStorageUrl(final String url) {
secondaryStorageUrl = url;
}
@@ -84,7 +75,7 @@ public class PrimaryStorageDownloadCommand extends AbstractDownloadCommand {
return secondaryStorageUrl;
}
- public void setPrimaryStorageUrl(String url) {
+ public void setPrimaryStorageUrl(final String url) {
primaryStorageUrl = url;
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
index 3c55a88..c412b54 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/CitrixResourceBase.java
@@ -441,12 +441,6 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
if (cmd instanceof NetworkElementCommand) {
return _vrResource.executeRequest((NetworkElementCommand)cmd);
- } else if (clazz == AttachVolumeCommand.class) {
- return execute((AttachVolumeCommand)cmd);
- } else if (clazz == AttachIsoCommand.class) {
- return execute((AttachIsoCommand) cmd);
- } else if (clazz == UpgradeSnapshotCommand.class) {
- return execute((UpgradeSnapshotCommand)cmd);
} else if (clazz == GetStorageStatsCommand.class) {
return execute((GetStorageStatsCommand)cmd);
} else if (clazz == PrimaryStorageDownloadCommand.class) {
@@ -2751,7 +2745,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
- String copy_vhd_from_secondarystorage(final Connection conn, final String mountpoint, final String sruuid, final int wait) {
+ public String copyVhdFromSecondaryStorage(final Connection conn, final String mountpoint, final String sruuid, final int wait) {
final String nameLabel = "cloud-" + UUID.randomUUID().toString();
final String results =
callHostPluginAsync(conn, "vmopspremium", "copy_vhd_from_secondarystorage", wait, "mountpoint", mountpoint, "sruuid", sruuid, "namelabel", nameLabel);
@@ -2794,7 +2788,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
final String pUuid = poolsr.getUuid(conn);
final boolean isISCSI = IsISCSI(poolsr.getType(conn));
- final String uuid = copy_vhd_from_secondarystorage(conn, tmplpath, pUuid, wait);
+ final String uuid = copyVhdFromSecondaryStorage(conn, tmplpath, pUuid, wait);
final VDI tmpl = getVDIbyUuid(conn, uuid);
final VDI snapshotvdi = tmpl.snapshot(conn, new HashMap<String, String>());
final String snapshotUuid = snapshotvdi.getUuid(conn);
@@ -6589,7 +6583,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
}
}
- boolean IsISCSI(final String type) {
+ public boolean IsISCSI(final String type) {
return SRType.LVMOHBA.equals(type) || SRType.LVMOISCSI.equals(type) || SRType.LVM.equals(type);
}
@@ -6838,7 +6832,7 @@ public abstract class CitrixResourceBase implements ServerResource, HypervisorRe
return success;
}
- protected String getVhdParent(final Connection conn, final String primaryStorageSRUuid, final String snapshotUuid, final Boolean isISCSI) {
+ public String getVhdParent(final Connection conn, final String primaryStorageSRUuid, final String snapshotUuid, final Boolean isISCSI) {
final String parentUuid =
callHostPlugin(conn, "vmopsSnapshot", "getVhdParent", "primaryStorageSRUuid", primaryStorageSRUuid, "snapshotUuid", snapshotUuid, "isISCSI",
isISCSI.toString());
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixGetStorageStatsCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixGetStorageStatsCommandWrapper.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixGetStorageStatsCommandWrapper.java
new file mode 100644
index 0000000..e0001cc
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixGetStorageStatsCommandWrapper.java
@@ -0,0 +1,69 @@
+//
+// 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 com.cloud.hypervisor.xenserver.resource.wrapper;
+
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+import org.apache.xmlrpc.XmlRpcException;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.GetStorageStatsAnswer;
+import com.cloud.agent.api.GetStorageStatsCommand;
+import com.cloud.hypervisor.xenserver.resource.CitrixResourceBase;
+import com.cloud.resource.CommandWrapper;
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.Types.XenAPIException;
+
+public final class CitrixGetStorageStatsCommandWrapper extends CommandWrapper<GetStorageStatsCommand, Answer, CitrixResourceBase> {
+
+ private static final Logger s_logger = Logger.getLogger(CitrixGetStorageStatsCommandWrapper.class);
+
+ @Override
+ public Answer execute(final GetStorageStatsCommand command, final CitrixResourceBase citrixResourceBase) {
+ final Connection conn = citrixResourceBase.getConnection();
+ try {
+ final Set<SR> srs = SR.getByNameLabel(conn, command.getStorageId());
+ if (srs.size() != 1) {
+ final String msg = "There are " + srs.size() + " storageid: " + command.getStorageId();
+ s_logger.warn(msg);
+ return new GetStorageStatsAnswer(command, msg);
+ }
+ final SR sr = srs.iterator().next();
+ sr.scan(conn);
+ final long capacity = sr.getPhysicalSize(conn);
+ final long used = sr.getPhysicalUtilisation(conn);
+ return new GetStorageStatsAnswer(command, capacity, used);
+ } catch (final XenAPIException e) {
+ final String msg = "GetStorageStats Exception:" + e.toString() + "host:" + citrixResourceBase.getHost().getUuid() + "storageid: " + command.getStorageId();
+ s_logger.warn(msg);
+ return new GetStorageStatsAnswer(command, msg);
+ } catch (final XmlRpcException e) {
+ final String msg = "GetStorageStats Exception:" + e.getMessage() + "host:" + citrixResourceBase.getHost().getUuid() + "storageid: " + command.getStorageId();
+ s_logger.warn(msg);
+ return new GetStorageStatsAnswer(command, msg);
+ } catch (final Exception e) {
+ final String msg = "GetStorageStats Exception:" + e.getMessage() + "host:" + citrixResourceBase.getHost().getUuid() + "storageid: " + command.getStorageId();
+ s_logger.warn(msg);
+ return new GetStorageStatsAnswer(command, msg);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixPrimaryStorageDownloadCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixPrimaryStorageDownloadCommandWrapper.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixPrimaryStorageDownloadCommandWrapper.java
new file mode 100644
index 0000000..2705207
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixPrimaryStorageDownloadCommandWrapper.java
@@ -0,0 +1,83 @@
+//
+// 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 com.cloud.hypervisor.xenserver.resource.wrapper;
+
+import java.net.URI;
+import java.util.HashMap;
+import java.util.Set;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
+import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
+import com.cloud.hypervisor.xenserver.resource.CitrixResourceBase;
+import com.cloud.resource.CommandWrapper;
+import com.xensource.xenapi.Connection;
+import com.xensource.xenapi.SR;
+import com.xensource.xenapi.VDI;
+
+public final class CitrixPrimaryStorageDownloadCommandWrapper extends CommandWrapper<PrimaryStorageDownloadCommand, Answer, CitrixResourceBase> {
+
+ private static final Logger s_logger = Logger.getLogger(CitrixPrimaryStorageDownloadCommandWrapper.class);
+
+ @Override
+ public Answer execute(final PrimaryStorageDownloadCommand command, final CitrixResourceBase citrixResourceBase) {
+ final String tmplturl = command.getUrl();
+ final String poolName = command.getPoolUuid();
+ final int wait = command.getWait();
+ try {
+ final URI uri = new URI(tmplturl);
+ final String tmplpath = uri.getHost() + ":" + uri.getPath();
+ final Connection conn = citrixResourceBase.getConnection();
+ SR poolsr = null;
+ final Set<SR> srs = SR.getByNameLabel(conn, poolName);
+ if (srs.size() != 1) {
+ final String msg = "There are " + srs.size() + " SRs with same name: " + poolName;
+ s_logger.warn(msg);
+ return new PrimaryStorageDownloadAnswer(msg);
+ } else {
+ poolsr = srs.iterator().next();
+ }
+ final String pUuid = poolsr.getUuid(conn);
+ final boolean isISCSI = citrixResourceBase.IsISCSI(poolsr.getType(conn));
+ final String uuid = citrixResourceBase.copyVhdFromSecondaryStorage(conn, tmplpath, pUuid, wait);
+ final VDI tmpl = citrixResourceBase.getVDIbyUuid(conn, uuid);
+ final VDI snapshotvdi = tmpl.snapshot(conn, new HashMap<String, String>());
+ final String snapshotUuid = snapshotvdi.getUuid(conn);
+ snapshotvdi.setNameLabel(conn, "Template " + command.getName());
+ final String parentuuid = citrixResourceBase.getVhdParent(conn, pUuid, snapshotUuid, isISCSI);
+ final VDI parent = citrixResourceBase.getVDIbyUuid(conn, parentuuid);
+ final Long phySize = parent.getPhysicalUtilisation(conn);
+ tmpl.destroy(conn);
+ poolsr.scan(conn);
+ try {
+ Thread.sleep(5000);
+ } catch (final Exception e) {
+ }
+ return new PrimaryStorageDownloadAnswer(snapshotvdi.getUuid(conn), phySize);
+ } catch (final Exception e) {
+ final String msg = "Catch Exception " + e.getClass().getName() + " on host:" + citrixResourceBase.getHost().getUuid() + " for template: " + tmplturl + " due to "
+ + e.toString();
+ s_logger.warn(msg, e);
+ return new PrimaryStorageDownloadAnswer(msg);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapper.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapper.java
index 1deefea..c31c340 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapper.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapper.java
@@ -30,6 +30,7 @@ import com.cloud.agent.api.Command;
import com.cloud.agent.api.CreateStoragePoolCommand;
import com.cloud.agent.api.DeleteStoragePoolCommand;
import com.cloud.agent.api.GetHostStatsCommand;
+import com.cloud.agent.api.GetStorageStatsCommand;
import com.cloud.agent.api.GetVmDiskStatsCommand;
import com.cloud.agent.api.GetVmStatsCommand;
import com.cloud.agent.api.MigrateCommand;
@@ -44,6 +45,7 @@ import com.cloud.agent.api.proxy.CheckConsoleProxyLoadCommand;
import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
import com.cloud.agent.api.storage.CreateCommand;
import com.cloud.agent.api.storage.DestroyCommand;
+import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
import com.cloud.agent.api.storage.ResizeVolumeCommand;
import com.cloud.resource.CommandWrapper;
import com.cloud.resource.RequestWrapper;
@@ -89,6 +91,8 @@ public class CitrixRequestWrapper extends RequestWrapper {
map.put(AttachVolumeCommand.class, new CitrixAttachVolumeCommandWrapper());
map.put(AttachIsoCommand.class, new CitrixAttachIsoCommandWrapper());
map.put(UpgradeSnapshotCommand.class, new CitrixUpgradeSnapshotCommandWrapper());
+ map.put(GetStorageStatsCommand.class, new CitrixGetStorageStatsCommandWrapper());
+ map.put(PrimaryStorageDownloadCommand.class, new CitrixPrimaryStorageDownloadCommandWrapper());
}
public static CitrixRequestWrapper getInstance() {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/11d03368/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapperTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapperTest.java b/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapperTest.java
index d5f44e0..1873842 100644
--- a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapperTest.java
+++ b/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/CitrixRequestWrapperTest.java
@@ -25,6 +25,7 @@ import com.cloud.agent.api.Command;
import com.cloud.agent.api.CreateStoragePoolCommand;
import com.cloud.agent.api.DeleteStoragePoolCommand;
import com.cloud.agent.api.GetHostStatsCommand;
+import com.cloud.agent.api.GetStorageStatsCommand;
import com.cloud.agent.api.GetVmDiskStatsCommand;
import com.cloud.agent.api.GetVmStatsCommand;
import com.cloud.agent.api.MigrateCommand;
@@ -41,11 +42,14 @@ import com.cloud.agent.api.proxy.WatchConsoleProxyLoadCommand;
import com.cloud.agent.api.storage.CreateAnswer;
import com.cloud.agent.api.storage.CreateCommand;
import com.cloud.agent.api.storage.DestroyCommand;
+import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
import com.cloud.agent.api.storage.ResizeVolumeCommand;
+import com.cloud.agent.api.to.DataStoreTO;
import com.cloud.agent.api.to.StorageFilerTO;
import com.cloud.agent.api.to.VirtualMachineTO;
import com.cloud.hypervisor.xenserver.resource.CitrixResourceBase;
import com.cloud.hypervisor.xenserver.resource.XsHost;
+import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.VMTemplateStorageResourceAssoc;
import com.cloud.vm.DiskProfile;
@@ -400,6 +404,42 @@ public class CitrixRequestWrapperTest {
assertTrue(answer.getResult());
}
+
+ @Test
+ public void testGetStorageStatsCommand() {
+ final XsHost xsHost = Mockito.mock(XsHost.class);
+ final DataStoreTO store = Mockito.mock(DataStoreTO.class);
+
+ final GetStorageStatsCommand storageStatsCommand = new GetStorageStatsCommand(store);
+
+ final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
+ assertNotNull(wrapper);
+
+ when(citrixResourceBase.getHost()).thenReturn(xsHost);
+
+ final Answer answer = wrapper.execute(storageStatsCommand, citrixResourceBase);
+ verify(citrixResourceBase, times(1)).getConnection();
+
+ assertFalse(answer.getResult());
+ }
+
+ @Test
+ public void testPrimaryStorageDownloadCommand() {
+ final XsHost xsHost = Mockito.mock(XsHost.class);
+ final StoragePoolVO poolVO = Mockito.mock(StoragePoolVO.class);
+
+ final PrimaryStorageDownloadCommand storageDownloadCommand = new PrimaryStorageDownloadCommand("Test", "http://127.0.0.1", ImageFormat.VHD, 1l, poolVO, 200);
+
+ final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
+ assertNotNull(wrapper);
+
+ when(citrixResourceBase.getHost()).thenReturn(xsHost);
+
+ final Answer answer = wrapper.execute(storageDownloadCommand, citrixResourceBase);
+ verify(citrixResourceBase, times(1)).getConnection();
+
+ assertFalse(answer.getResult());
+ }
}
class NotAValidCommand extends Command {