From 5a134a6fe676d4461a2b5dbcc92057e18544718e Mon Sep 17 00:00:00 2001 From: Daan Hoogland Date: Fri, 23 Oct 2015 17:17:40 +0200 Subject: [PATCH] unit test for interface patterns in libvirt compute resource --- .../resource/LibvirtComputingResource.java | 31 +++++++++++++++++-- .../LibvirtComputingResourceTest.java | 13 ++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java index ef6b82795d9..11317afe5e2 100755 --- a/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java +++ b/plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/LibvirtComputingResource.java @@ -1160,8 +1160,7 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv for (int i = 0; i < interfaces.length; i++) { final String fname = interfaces[i].getName(); s_logger.debug("matchPifFileInDirectory: file name '" + fname + "'"); - if (fname.startsWith("eth") || fname.startsWith("bond") || fname.startsWith("team") || fname.startsWith("vlan") || fname.startsWith("vx") || fname.startsWith("em") || - fname.matches("^p\\d+p\\d+.*") || fname.startsWith("ens") || fname.startsWith("eno") || fname.startsWith("enp") || fname.startsWith("enx")) { + if (isInterface(fname)) { return fname; } } @@ -1170,6 +1169,34 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv return ""; } + String [] _ifNamePrefixes = { + "eth", + "bond", + "vlan", + "vx", + "em", + "ens", + "eno", + "enp", + "team", + "enx", + "^p\\d+p\\d+" + }; + /** + * @param fname + * @return + */ + boolean isInterface(final String fname) { + StringBuffer commonPattern = new StringBuffer(); + for (String ifNamePrefix : _ifNamePrefixes) { + commonPattern.append("|(").append(ifNamePrefix).append(".*)"); + } + if(fname.matches(commonPattern.toString())) { + return true; + } + return false; + } + public boolean checkNetwork(final String networkName) { if (networkName == null) { return true; diff --git a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java index 920c86a5edf..98a074a3f05 100644 --- a/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java +++ b/plugins/hypervisors/kvm/test/com/cloud/hypervisor/kvm/resource/LibvirtComputingResourceTest.java @@ -4999,4 +4999,17 @@ public class LibvirtComputingResourceTest { assertFalse(answer.getResult()); } + + @Test + public void testIsInterface () { + LibvirtComputingResource lvcr = new LibvirtComputingResource(); + assertFalse(lvcr.isInterface("bla")); + assertTrue(lvcr.isInterface("p99p00")); + for (String ifNamePrefix : lvcr._ifNamePrefixes) { + // excluding regexps as "\\\\d+" won't replace with String.replaceAll(String,String); + if (!ifNamePrefix.contains("\\")) { + assertTrue(lvcr.isInterface(ifNamePrefix + "0")); + } + } + } } \ No newline at end of file