[ 
https://issues.apache.org/jira/browse/CLOUDSTACK-2998?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16711994#comment-16711994
 ] 

ASF GitHub Bot commented on CLOUDSTACK-2998:
--------------------------------------------

rhtyd closed pull request #3000: CLOUDSTACK-2998: Added two more device name 
patterns to valid bridge slaves (lo* and dummy*)
URL: https://github.com/apache/cloudstack/pull/3000
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
index 39b92c3a352..ebaf23f1ca7 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/BridgeVifDriver.java
@@ -170,7 +170,7 @@ private String matchPifFileInDirectory(final String 
bridgeName) {
         for (File anInterface : interfaces) {
             final String fname = anInterface.getName();
             s_logger.debug("matchPifFileInDirectory: file name '" + fname + 
"'");
-            if (isInterface(fname)) {
+            if (LibvirtComputingResource.isInterface(fname)) {
                 return fname;
             }
         }
@@ -179,33 +179,6 @@ private String matchPifFileInDirectory(final String 
bridgeName) {
         return "";
     }
 
-    private static final String [] IF_NAME_PATTERNS = {
-            "^eth",
-            "^bond",
-            "^vlan",
-            "^vx",
-            "^em",
-            "^ens",
-            "^eno",
-            "^enp",
-            "^team",
-            "^enx",
-            "^p\\d+p\\d+"
-    };
-
-    /**
-     * @param fname
-     * @return
-     */
-    private static boolean isInterface(final String fname) {
-        StringBuilder commonPattern = new StringBuilder();
-        for (final String ifNamePattern : IF_NAME_PATTERNS) {
-            commonPattern.append("|(").append(ifNamePattern).append(".*)");
-        }
-
-        return fname.matches(commonPattern.toString());
-    }
-
     protected boolean isBroadcastTypeVlanOrVxlan(final NicTO nic) {
         return nic != null && (nic.getBroadcastType() == 
Networks.BroadcastDomainType.Vlan
                 || nic.getBroadcastType() == 
Networks.BroadcastDomainType.Vxlan);
@@ -432,7 +405,7 @@ private void deleteExistingLinkLocalRouteTable(String 
linkLocalBr) {
         }
         if (!foundLinkLocalBr) {
             Script.runSimpleBashScript("ip address add 169.254.0.1/16 dev " + 
linkLocalBr + ";" + "ip route add " + NetUtils.getLinkLocalCIDR() + " dev " + 
linkLocalBr + " src " +
-                NetUtils.getLinkLocalGateway());
+                    NetUtils.getLinkLocalGateway());
         }
     }
 
diff --git 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
index 26fcd01f63f..3b61337164a 100644
--- 
a/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
+++ 
b/plugins/hypervisors/kvm/src/main/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java
@@ -26,6 +26,7 @@
 import java.net.InetAddress;
 import java.net.URI;
 import java.net.URISyntaxException;
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -278,7 +279,7 @@
     protected String _rngPath = "/dev/random";
     protected int _rngRatePeriod = 1000;
     protected int _rngRateBytes = 2048;
-    private File _qemuSocketsPath;
+    protected File _qemuSocketsPath;
     private final String _qemuGuestAgentSocketName = "org.qemu.guest_agent.0";
     protected WatchDogAction _watchDogAction = WatchDogAction.NONE;
     protected WatchDogModel _watchDogModel = WatchDogModel.I6300ESB;
@@ -1308,7 +1309,7 @@ private String matchPifFileInDirectory(final String 
bridgeName) {
         return "";
     }
 
-    String [] _ifNamePatterns = {
+    static String [] ifNamePatterns = {
             "^eth",
             "^bond",
             "^vlan",
@@ -1319,15 +1320,18 @@ private String matchPifFileInDirectory(final String 
bridgeName) {
             "^enp",
             "^team",
             "^enx",
+            "^dummy",
+            "^lo",
             "^p\\d+p\\d+"
     };
+
     /**
      * @param fname
      * @return
      */
-    boolean isInterface(final String fname) {
+    protected static boolean isInterface(final String fname) {
         StringBuffer commonPattern = new StringBuffer();
-        for (final String ifNamePattern : _ifNamePatterns) {
+        for (final String ifNamePattern : ifNamePatterns) {
             commonPattern.append("|(").append(ifNamePattern).append(".*)");
         }
         if(fname.matches(commonPattern.toString())) {
@@ -1502,7 +1506,7 @@ public synchronized boolean 
findOrCreateTunnelNetwork(final String nwName) {
     }
 
     public synchronized boolean configureTunnelNetwork(final long networkId,
-            final long hostId, final String nwName) {
+                                                       final long hostId, 
final String nwName) {
         try {
             final boolean findResult = findOrCreateTunnelNetwork(nwName);
             if (!findResult) {
@@ -1532,7 +1536,7 @@ public synchronized boolean configureTunnelNetwork(final 
long networkId,
                 if (result != null) {
                     throw new CloudRuntimeException(
                             "Unable to pre-configure OVS bridge " + nwName
-                            + " for network ID:" + networkId);
+                                    + " for network ID:" + networkId);
                 }
             }
         } catch (final Exception e) {
@@ -2172,8 +2176,8 @@ So if getMinSpeed() returns null we fall back to 
getSpeed().
 
         /* Add a VirtIO channel for SystemVMs for communication and 
provisioning */
         if (vmTO.getType() != VirtualMachine.Type.User) {
-            devices.addDevice(new ChannelDef(vmTO.getName() + ".vport", 
ChannelDef.ChannelType.UNIX,
-                              new File(_qemuSocketsPath + "/" + vmTO.getName() 
+ ".agent")));
+            File virtIoChannel = Paths.get(_qemuSocketsPath.getPath(), 
vmTO.getName() + ".agent").toFile();
+            devices.addDevice(new ChannelDef(vmTO.getName() + ".vport", 
ChannelDef.ChannelType.UNIX, virtIoChannel));
         }
 
         if (_rngEnable) {
@@ -2182,8 +2186,8 @@ So if getMinSpeed() returns null we fall back to 
getSpeed().
         }
 
         /* Add a VirtIO channel for the Qemu Guest Agent tools */
-        devices.addDevice(new ChannelDef(_qemuGuestAgentSocketName, 
ChannelDef.ChannelType.UNIX,
-                          new File(_qemuSocketsPath + "/" + vmTO.getName() + 
"." + _qemuGuestAgentSocketName)));
+        File virtIoChannel = Paths.get(_qemuSocketsPath.getPath(), 
vmTO.getName() + "." + _qemuGuestAgentSocketName).toFile();
+        devices.addDevice(new ChannelDef(_qemuGuestAgentSocketName, 
ChannelDef.ChannelType.UNIX, virtIoChannel));
 
         devices.addDevice(new WatchDogDef(_watchDogAction, _watchDogModel));
 
@@ -2488,7 +2492,7 @@ protected KVMStoragePoolManager getPoolManager() {
     }
 
     public synchronized String attachOrDetachISO(final Connect conn, final 
String vmName, String isoPath, final boolean isAttach, final Integer diskSeq) 
throws LibvirtException, URISyntaxException,
-    InternalErrorException {
+            InternalErrorException {
         final DiskDef iso = new DiskDef();
         if (isoPath != null && isAttach) {
             final int index = isoPath.lastIndexOf("/");
@@ -2518,8 +2522,8 @@ public synchronized String attachOrDetachISO(final 
Connect conn, final String vm
     }
 
     public synchronized String attachOrDetachDisk(final Connect conn,
-            final boolean attach, final String vmName, final KVMPhysicalDisk 
attachingDisk,
-            final int devId, final Long bytesReadRate, final Long 
bytesWriteRate, final Long iopsReadRate, final Long iopsWriteRate, final String 
cacheMode) throws LibvirtException, InternalErrorException {
+                                                  final boolean attach, final 
String vmName, final KVMPhysicalDisk attachingDisk,
+                                                  final int devId, final Long 
bytesReadRate, final Long bytesWriteRate, final Long iopsReadRate, final Long 
iopsWriteRate, final String cacheMode) throws LibvirtException, 
InternalErrorException {
         List<DiskDef> disks = null;
         Domain dm = null;
         DiskDef diskdef = null;
@@ -2895,9 +2899,9 @@ private String getIqn() {
             speed = getCpuSpeed(hosts);
 
             /*
-            * Some CPUs report a single socket and multiple NUMA cells.
-            * We need to multiply them to get the correct socket count.
-            */
+             * Some CPUs report a single socket and multiple NUMA cells.
+             * We need to multiply them to get the correct socket count.
+             */
             cpuSockets = hosts.sockets;
             if (hosts.nodes > 0) {
                 cpuSockets = hosts.sockets * hosts.nodes;
@@ -3470,12 +3474,12 @@ public VmStatsEntry getVmStat(final Connect conn, final 
String vmName) throws Li
     }
 
     /**
-    * This method retrieves the memory statistics from the domain given as 
parameters.
-    * If no memory statistic is found, it will return {@link 
NumberUtils#LONG_ZERO} as the value of free memory in the domain.
-    * If it can retrieve the domain memory statistics, it will return the free 
memory statistic; that means, it returns the value at the first position of the 
array returned by {@link Domain#memoryStats(int)}.
-    *
-    * @return the amount of free memory in KBs
-    */
+     * This method retrieves the memory statistics from the domain given as 
parameters.
+     * If no memory statistic is found, it will return {@link 
NumberUtils#LONG_ZERO} as the value of free memory in the domain.
+     * If it can retrieve the domain memory statistics, it will return the 
free memory statistic; that means, it returns the value at the first position 
of the array returned by {@link Domain#memoryStats(int)}.
+     *
+     * @return the amount of free memory in KBs
+     */
     protected long getMemoryFreeInKBs(Domain dm) throws LibvirtException {
         MemoryStatistic[] mems = dm.memoryStats(NUMMEMSTATS);
         if (ArrayUtils.isEmpty(mems)) {
@@ -3605,7 +3609,7 @@ public boolean 
configureDefaultNetworkRulesForSystemVm(final Connect conn, final
     }
 
     public boolean addNetworkRules(final String vmName, final String vmId, 
final String guestIP, final String guestIP6, final String sig, final String 
seq, final String mac, final String rules, final String vif, final String 
brname,
-            final String secIps) {
+                                   final String secIps) {
         if (!_canBridgeFirewall) {
             return false;
         }
@@ -3853,7 +3857,7 @@ public String getHostDistro() {
     public boolean isHostSecured() {
         // Test for host certificates
         final File confFile = 
PropertiesUtil.findConfigFile(KeyStoreUtils.AGENT_PROPSFILE);
-        if (confFile == null || !confFile.exists() || !new 
File(confFile.getParent() + "/" + KeyStoreUtils.CERT_FILENAME).exists()) {
+        if (confFile == null || !confFile.exists() || 
!Paths.get(confFile.getParent(), 
KeyStoreUtils.CERT_FILENAME).toFile().exists()) {
             return false;
         }
 
diff --git 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
index 97d14cfaefc..c2396e81c17 100644
--- 
a/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
+++ 
b/plugins/hypervisors/kvm/src/test/java/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java
@@ -200,11 +200,11 @@
     Random random = new Random();
 
     /**
-        This test tests if the Agent can handle a vmSpec coming
-        from a <=4.1 management server.
+     This test tests if the Agent can handle a vmSpec coming
+     from a <=4.1 management server.
 
-        The overcommit feature has not been merged in there and thus
-        only 'speed' is set.
+     The overcommit feature has not been merged in there and thus
+     only 'speed' is set.
      */
     @Test
     public void testCreateVMFromSpecLegacy() {
@@ -222,6 +222,8 @@ public void testCreateVMFromSpecLegacy() {
         final String vncPassword = "mySuperSecretPassword";
 
         final LibvirtComputingResource lcr = new LibvirtComputingResource();
+        lcr._qemuSocketsPath = new File("/var/run/qemu");
+
         final VirtualMachineTO to = new VirtualMachineTO(id, name, 
VirtualMachine.Type.User, cpus, speed, minRam, maxRam, BootloaderType.HVM, os, 
false, false, vncPassword);
         to.setVncAddr(vncAddr);
         to.setUuid("b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9");
@@ -233,7 +235,7 @@ public void testCreateVMFromSpecLegacy() {
     }
 
     /**
-        This test verifies that CPU topology is properly set for hex-core
+     This test verifies that CPU topology is properly set for hex-core
      */
     @Test
     public void testCreateVMFromSpecWithTopology6() {
@@ -252,6 +254,8 @@ public void testCreateVMFromSpecWithTopology6() {
         final String vncPassword = "mySuperSecretPassword";
 
         final LibvirtComputingResource lcr = new LibvirtComputingResource();
+        lcr._qemuSocketsPath = new File("/var/run/qemu");
+
         final VirtualMachineTO to = new VirtualMachineTO(id, name, 
VirtualMachine.Type.User, cpus, minSpeed, maxSpeed, minRam, maxRam, 
BootloaderType.HVM, os, false, false, vncPassword);
         to.setVncAddr(vncAddr);
         to.setUuid("b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9");
@@ -263,7 +267,7 @@ public void testCreateVMFromSpecWithTopology6() {
     }
 
     /**
-        This test verifies that CPU topology is properly set for quad-core
+     This test verifies that CPU topology is properly set for quad-core
      */
     @Test
     public void testCreateVMFromSpecWithTopology4() {
@@ -282,6 +286,8 @@ public void testCreateVMFromSpecWithTopology4() {
         final String vncPassword = "mySuperSecretPassword";
 
         final LibvirtComputingResource lcr = new LibvirtComputingResource();
+        lcr._qemuSocketsPath = new File("/var/run/qemu");
+
         final VirtualMachineTO to = new VirtualMachineTO(id, name, 
VirtualMachine.Type.User, cpus, minSpeed, maxSpeed, minRam, maxRam, 
BootloaderType.HVM, os, false, false, vncPassword);
         to.setVncAddr(vncAddr);
         to.setUuid("b0f0a72d-7efb-3cad-a8ff-70ebf30b3af9");
@@ -293,11 +299,11 @@ public void testCreateVMFromSpecWithTopology4() {
     }
 
     /**
-        This test tests if the Agent can handle a vmSpec coming
-        from a >4.1 management server.
+     This test tests if the Agent can handle a vmSpec coming
+     from a >4.1 management server.
 
-        It tests if the Agent can handle a vmSpec with overcommit
-        data like minSpeed and maxSpeed in there
+     It tests if the Agent can handle a vmSpec with overcommit
+     data like minSpeed and maxSpeed in there
      */
     @Test
     public void testCreateVMFromSpec() {
@@ -316,6 +322,8 @@ public void testCreateVMFromSpec() {
         final String vncPassword = "mySuperSecretPassword";
 
         final LibvirtComputingResource lcr = new LibvirtComputingResource();
+        lcr._qemuSocketsPath = new File("/var/run/qemu");
+
         final VirtualMachineTO to =
                 new VirtualMachineTO(id, name, VirtualMachine.Type.User, cpus, 
minSpeed, maxSpeed, minRam, maxRam, BootloaderType.HVM, os, false, false, 
vncPassword);
         to.setVncAddr(vncAddr);
@@ -359,7 +367,7 @@ The configure() method of LibvirtComputingResource has not 
been called, so the d
            Calling configure is also not possible since that looks for certain 
files on the system which are not present
            during testing
          */
-        assertXpath(domainDoc, "/domain/devices/channel/source/@path", "null/" 
+ to.getName() + ".org.qemu.guest_agent.0");
+        assertXpath(domainDoc, "/domain/devices/channel/source/@path", 
"/var/run/qemu/" + to.getName() + ".org.qemu.guest_agent.0");
         assertXpath(domainDoc, "/domain/devices/channel/target/@name", 
"org.qemu.guest_agent.0");
 
         assertXpath(domainDoc, "/domain/memory/text()", String.valueOf( 
to.getMaxRam() / 1024 ));
@@ -402,7 +410,7 @@ static void assertNodeExists(final Document doc, final 
String xPathExpr) {
     }
 
     static void assertXpath(final Document doc, final String xPathExpr,
-            final String expected) {
+                            final String expected) {
         try {
             Assert.assertEquals(expected, XPathFactory.newInstance().newXPath()
                     .evaluate(xPathExpr, doc));
@@ -5118,7 +5126,13 @@ public void testIsInterface () {
         final LibvirtComputingResource lvcr = new LibvirtComputingResource();
         assertFalse(lvcr.isInterface("bla"));
         assertTrue(lvcr.isInterface("p99p00"));
-        for  (final String ifNamePattern : lvcr._ifNamePatterns) {
+        assertTrue(lvcr.isInterface("lo1"));
+        assertTrue(lvcr.isInterface("lo_11"));
+        assertTrue(lvcr.isInterface("lo_public_1"));
+        assertTrue(lvcr.isInterface("dummy0"));
+        assertTrue(lvcr.isInterface("dummy_0"));
+        assertTrue(lvcr.isInterface("dummy_private_0"));
+        for  (final String ifNamePattern : lvcr.ifNamePatterns) {
             // excluding regexps as "\\\\d+" won't replace with 
String.replaceAll(String,String);
             if (!ifNamePattern.contains("\\")) {
                 final String ifName = ifNamePattern.replaceFirst("\\^", "") + 
"0";


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


> UK: Exploring Testing - unexpected output occurred on Ctrl+Keypad, 
> AltGR+Keypad and AltGR+ Numerics 
> ----------------------------------------------------------------------------------------------------
>
>                 Key: CLOUDSTACK-2998
>                 URL: https://issues.apache.org/jira/browse/CLOUDSTACK-2998
>             Project: CloudStack
>          Issue Type: Bug
>      Security Level: Public(Anyone can view this level - this is the 
> default.) 
>          Components: VNC Proxy
>    Affects Versions: 4.2.0
>         Environment: Build No.#396 
> (CloudStack-non-OSS-MASTER-396-rhel6.3.tar.gz)
> XenServer6.1 for Host Server, CentOS6.3 for NFS server and CloudStack-Mgr 
> Server, Win7-x86 for Client machine. 
>            Reporter: Minying Bao
>            Priority: Major
>             Fix For: 4.2.0
>
>         Attachments: Build#4.2-241-Exploring Testing_UK Keyboard_issues.xlsx, 
> Exploring Testing_UK Keyboard_issues.xlsx
>
>
> Steps
> 1. Setup the CloudStack environments with build 4.2#396.
> 2. Bring UK Win-7 x86 VMs.
> 3. Access the VM via Console Proxy from the UK client machines, choose the 
> "UK Keyboard" for Keyboard Option.
> 4. Make a exploring testing of all the keys with UK keyboard. Just like 
> Ctrl+Keypad keys, AltGR+Keypad keys or AltGR+ Numeric keys like 1,2,3...
> Expected Result
> All the combination should not return any values.
> Actual Result
> Unexpected output or unexpected operation occurred on some Ctrl+Keypad keys, 
> AltGR+Keypad keys and AltGR+ Numerics.
> Please refer to the details as attached Excel. 



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to