Merge pull request #1035 from DaanHoogland/CLOUDSTACK-9037

CLOUDSTACK-9037 patterns can be more elaborate then prefixes.little fix to make sure for instance "eth" is not regarded as interface when it is part of "methamfetamine"

* pr/1035:
  CLOUDSTACK-9037 patterns can be more elaborate then prefixes.

Signed-off-by: Remi Bergsma <github@remi.nl>
This commit is contained in:
Remi Bergsma 2015-11-27 19:44:35 +01:00
commit 3358d6509b
2 changed files with 18 additions and 17 deletions

View File

@ -1170,17 +1170,17 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
return "";
}
String [] _ifNamePrefixes = {
"eth",
"bond",
"vlan",
"vx",
"em",
"ens",
"eno",
"enp",
"team",
"enx",
String [] _ifNamePatterns = {
"^eth",
"^bond",
"^vlan",
"^vx",
"^em",
"^ens",
"^eno",
"^enp",
"^team",
"^enx",
"^p\\d+p\\d+"
};
/**
@ -1188,9 +1188,9 @@ public class LibvirtComputingResource extends ServerResourceBase implements Serv
* @return
*/
boolean isInterface(final String fname) {
final StringBuffer commonPattern = new StringBuffer();
for (final String ifNamePrefix : _ifNamePrefixes) {
commonPattern.append("|(").append(ifNamePrefix).append(".*)");
StringBuffer commonPattern = new StringBuffer();
for (final String ifNamePattern : _ifNamePatterns) {
commonPattern.append("|(").append(ifNamePattern).append(".*)");
}
if(fname.matches(commonPattern.toString())) {
return true;

View File

@ -5005,10 +5005,11 @@ public class LibvirtComputingResourceTest {
LibvirtComputingResource lvcr = new LibvirtComputingResource();
assertFalse(lvcr.isInterface("bla"));
assertTrue(lvcr.isInterface("p99p00"));
for (String ifNamePrefix : lvcr._ifNamePrefixes) {
for (String ifNamePattern : lvcr._ifNamePatterns) {
// excluding regexps as "\\\\d+" won't replace with String.replaceAll(String,String);
if (!ifNamePrefix.contains("\\")) {
assertTrue(lvcr.isInterface(ifNamePrefix + "0"));
if (!ifNamePattern.contains("\\")) {
String ifName = ifNamePattern.replaceFirst("\\^", "") + "0";
assertTrue("The pattern '" + ifNamePattern + "' is expected to be valid for interface " + ifName,lvcr.isInterface(ifName));
}
}
}