You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ek...@apache.org on 2015/04/05 13:25:15 UTC
[8/8] git commit: updated refs/heads/master to 096d1b9
This closes #146
Refactoring the NetworkUsageCommand wrapper in order to cope with new design
- Unit tests added: 100% coverage
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/096d1b93
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/096d1b93
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/096d1b93
Branch: refs/heads/master
Commit: 096d1b93b019d5232c2478ca63fc16eb6794fbe2
Parents: 02d1cdd
Author: wilderrodrigues <wr...@schubergphilis.com>
Authored: Fri Apr 3 17:23:16 2015 +0200
Committer: wilderrodrigues <wr...@schubergphilis.com>
Committed: Sun Apr 5 13:24:45 2015 +0200
----------------------------------------------------------------------
.../xenserver/resource/XcpServerResource.java | 30 -----
.../xenserver/resource/XenServer56Resource.java | 18 ---
.../resource/wrapper/CitrixRequestWrapper.java | 6 +
.../XcpServerNetworkUsageCommandWrapper.java | 52 +++++++++
.../resource/wrapper/XcpServerWrapperTest.java | 116 +++++++++++++++++++
5 files changed, 174 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/096d1b93/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
index 0cb4206..03d9bf1 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XcpServerResource.java
@@ -25,10 +25,6 @@ import javax.ejb.Local;
import org.apache.log4j.Logger;
import org.apache.xmlrpc.XmlRpcException;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.NetworkUsageAnswer;
-import com.cloud.agent.api.NetworkUsageCommand;
import com.cloud.resource.ServerResource;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
@@ -44,15 +40,6 @@ public class XcpServerResource extends CitrixResourceBase {
private final static long mem_32m = 33554432L;
@Override
- public Answer executeRequest(final Command cmd) {
- if (cmd instanceof NetworkUsageCommand) {
- return execute((NetworkUsageCommand)cmd);
- } else {
- return super.executeRequest(cmd);
- }
- }
-
- @Override
protected List<File> getPatchFiles() {
final List<File> files = new ArrayList<File>();
final String patch = "scripts/vm/hypervisor/xenserver/xcpserver/patch";
@@ -65,23 +52,6 @@ public class XcpServerResource extends CitrixResourceBase {
return files;
}
- protected NetworkUsageAnswer execute(final NetworkUsageCommand cmd) {
- try {
- final Connection conn = getConnection();
- if (cmd.getOption() != null && cmd.getOption().equals("create")) {
- final String result = networkUsage(conn, cmd.getPrivateIP(), "create", null);
- final NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, result, 0L, 0L);
- return answer;
- }
- final long[] stats = getNetworkStats(conn, cmd.getPrivateIP());
- final NetworkUsageAnswer answer = new NetworkUsageAnswer(cmd, "", stats[0], stats[1]);
- return answer;
- } catch (final Exception ex) {
- s_logger.warn("Failed to get network usage stats due to ", ex);
- return new NetworkUsageAnswer(cmd, ex);
- }
- }
-
/**
XCP provides four memory configuration fields through which
administrators can control this behaviour:
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/096d1b93/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
index 3a30dae..12e4fc5 100644
--- a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/XenServer56Resource.java
@@ -25,10 +25,7 @@ import javax.ejb.Local;
import org.apache.log4j.Logger;
import org.apache.xmlrpc.XmlRpcException;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
import com.cloud.agent.api.StartupCommand;
-import com.cloud.hypervisor.xenserver.resource.wrapper.CitrixRequestWrapper;
import com.cloud.resource.ServerResource;
import com.cloud.utils.exception.CloudRuntimeException;
import com.cloud.utils.script.Script;
@@ -46,17 +43,6 @@ public class XenServer56Resource extends CitrixResourceBase {
private final static Logger s_logger = Logger.getLogger(XenServer56Resource.class);
@Override
- public Answer executeRequest(final Command cmd) {
-
- final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
- try {
- return wrapper.execute(cmd, this);
- } catch (final Exception e) {
- return super.executeRequest(cmd);
- }
- }
-
- @Override
protected List<File> getPatchFiles() {
final List<File> files = new ArrayList<File>();
final String patch = "scripts/vm/hypervisor/xenserver/xenserver56/patch";
@@ -193,8 +179,4 @@ public class XenServer56Resource extends CitrixResourceBase {
final StartupCommand[] cmds = super.initialize();
return cmds;
}
-
- public XenServer56Resource() {
- super();
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/096d1b93/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 8128f23..4537b2a 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
@@ -90,6 +90,7 @@ import com.cloud.agent.api.storage.MigrateVolumeCommand;
import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
import com.cloud.agent.api.storage.ResizeVolumeCommand;
import com.cloud.hypervisor.xenserver.resource.CitrixResourceBase;
+import com.cloud.hypervisor.xenserver.resource.XcpServerResource;
import com.cloud.hypervisor.xenserver.resource.XenServer56FP1Resource;
import com.cloud.hypervisor.xenserver.resource.XenServer56Resource;
import com.cloud.hypervisor.xenserver.resource.XenServer610Resource;
@@ -204,6 +205,11 @@ public class CitrixRequestWrapper extends RequestWrapper {
xenServer610Commands.put(MigrateWithStorageCompleteCommand.class, new XenServer610MigrateWithStorageCompleteCommandWrapper());
xenServer610Commands.put(MigrateVolumeCommand.class, new XenServer610MigrateVolumeCommandWrapper());
resources.put(XenServer610Resource.class, xenServer610Commands);
+
+ // XcpServerResource commands
+ final Hashtable<Class<? extends Command>, CommandWrapper> xcpServerResourceCommand = new Hashtable<Class<? extends Command>, CommandWrapper>();
+ xcpServerResourceCommand.put(NetworkUsageCommand.class, new XcpServerNetworkUsageCommandWrapper());
+ resources.put(XcpServerResource.class, xcpServerResourceCommand);
}
public static CitrixRequestWrapper getInstance() {
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/096d1b93/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerNetworkUsageCommandWrapper.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerNetworkUsageCommandWrapper.java b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerNetworkUsageCommandWrapper.java
new file mode 100644
index 0000000..d22c608
--- /dev/null
+++ b/plugins/hypervisors/xenserver/src/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerNetworkUsageCommandWrapper.java
@@ -0,0 +1,52 @@
+//
+// 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 org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.NetworkUsageAnswer;
+import com.cloud.agent.api.NetworkUsageCommand;
+import com.cloud.hypervisor.xenserver.resource.XcpServerResource;
+import com.cloud.resource.CommandWrapper;
+import com.xensource.xenapi.Connection;
+
+public final class XcpServerNetworkUsageCommandWrapper extends CommandWrapper<NetworkUsageCommand, Answer, XcpServerResource> {
+
+ private static final Logger s_logger = Logger.getLogger(XcpServerNetworkUsageCommandWrapper.class);
+
+ @Override
+ public Answer execute(final NetworkUsageCommand command, final XcpServerResource xcpServerResource) {
+ try {
+ final Connection conn = xcpServerResource.getConnection();
+ if (command.getOption() != null && command.getOption().equals("create")) {
+ final String result = xcpServerResource.networkUsage(conn, command.getPrivateIP(), "create", null);
+ final NetworkUsageAnswer answer = new NetworkUsageAnswer(command, result, 0L, 0L);
+ return answer;
+ }
+ final long[] stats = xcpServerResource.getNetworkStats(conn, command.getPrivateIP());
+ final NetworkUsageAnswer answer = new NetworkUsageAnswer(command, "", stats[0], stats[1]);
+ return answer;
+ } catch (final Exception ex) {
+ s_logger.warn("Failed to get network usage stats due to ", ex);
+ return new NetworkUsageAnswer(command, ex);
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/096d1b93/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerWrapperTest.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerWrapperTest.java b/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerWrapperTest.java
new file mode 100644
index 0000000..358d670
--- /dev/null
+++ b/plugins/hypervisors/xenserver/test/com/cloud/hypervisor/xenserver/resource/wrapper/XcpServerWrapperTest.java
@@ -0,0 +1,116 @@
+// 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 static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.NetworkUsageCommand;
+import com.cloud.hypervisor.xenserver.resource.XcpServerResource;
+import com.cloud.utils.exception.CloudRuntimeException;
+import com.xensource.xenapi.Connection;
+
+@RunWith(PowerMockRunner.class)
+public class XcpServerWrapperTest {
+
+ @Mock
+ protected XcpServerResource XcpServerResource;
+
+
+ @Test
+ public void testNetworkUsageCommandCreate() {
+ final Connection conn = Mockito.mock(Connection.class);
+
+ final String privateIP = "192.168.0.10";
+ final String domRName = "dom";
+ final String option = "create";
+ final boolean forVpc = true;
+
+ final NetworkUsageCommand usageCommand = new NetworkUsageCommand(privateIP, domRName, option, forVpc);
+
+ final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
+ assertNotNull(wrapper);
+
+ when(XcpServerResource.getConnection()).thenReturn(conn);
+ when(XcpServerResource.networkUsage(conn, usageCommand.getPrivateIP(), "create", null)).thenReturn("success");
+
+ final Answer answer = wrapper.execute(usageCommand, XcpServerResource);
+
+ verify(XcpServerResource, times(1)).getConnection();
+
+ assertTrue(answer.getResult());
+ }
+
+ @Test
+ public void testNetworkUsageCommandGet() {
+ final Connection conn = Mockito.mock(Connection.class);
+
+ final String privateIP = "192.168.0.10";
+ final String domRName = "dom";
+ final boolean forVpc = true;
+ final String gatewayIp = "172.16.0.10";
+
+ final NetworkUsageCommand usageCommand = new NetworkUsageCommand(privateIP, domRName, forVpc, gatewayIp);
+
+ final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
+ assertNotNull(wrapper);
+
+ when(XcpServerResource.getConnection()).thenReturn(conn);
+ when(XcpServerResource.getNetworkStats(conn, usageCommand.getPrivateIP())).thenReturn(new long[]{1l, 1l});
+
+ final Answer answer = wrapper.execute(usageCommand, XcpServerResource);
+
+ verify(XcpServerResource, times(1)).getConnection();
+
+ assertTrue(answer.getResult());
+ }
+
+ @Test
+ public void testNetworkUsageCommandExceptiopn() {
+ final Connection conn = Mockito.mock(Connection.class);
+
+ final String privateIP = "192.168.0.10";
+ final String domRName = "dom";
+ final String option = null;
+ final boolean forVpc = true;
+
+ final NetworkUsageCommand usageCommand = new NetworkUsageCommand(privateIP, domRName, option, forVpc);
+
+ final CitrixRequestWrapper wrapper = CitrixRequestWrapper.getInstance();
+ assertNotNull(wrapper);
+
+ when(XcpServerResource.getConnection()).thenReturn(conn);
+ when(XcpServerResource.networkUsage(conn, usageCommand.getPrivateIP(), "create", null)).thenThrow(new CloudRuntimeException("FAILED"));
+
+ final Answer answer = wrapper.execute(usageCommand, XcpServerResource);
+
+ verify(XcpServerResource, times(1)).getConnection();
+
+ assertFalse(answer.getResult());
+ }
+}
\ No newline at end of file