This is an automated email from the ASF dual-hosted git repository.

dahn pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/main by this push:
     new 91645349b06 Allow privateips on console proxy (#6808)
91645349b06 is described below

commit 91645349b069ce811bf0a609f2230ee0d2e1da3e
Author: GaOrtiga <[email protected]>
AuthorDate: Thu Dec 22 12:43:45 2022 -0300

    Allow privateips on console proxy (#6808)
    
    Co-authored-by: Rodrigo D. Lopez 
<[email protected]>
    Co-authored-by: Stephan Krug <[email protected]>
    Co-authored-by: Gabriel Ortiga Fernandes <[email protected]>
---
 .../main/java/com/cloud/configuration/Config.java  |  10 +-
 .../configuration/ConfigurationManagerImpl.java    | 199 +++++++++++++--------
 .../java/com/cloud/configuration/ConfigTest.java   |  42 +++++
 .../ConfigurationManagerImplTest.java              | 194 ++++++++++++++++++++
 4 files changed, 365 insertions(+), 80 deletions(-)

diff --git a/server/src/main/java/com/cloud/configuration/Config.java 
b/server/src/main/java/com/cloud/configuration/Config.java
index 1dafb2855a9..c07115d87c2 100644
--- a/server/src/main/java/com/cloud/configuration/Config.java
+++ b/server/src/main/java/com/cloud/configuration/Config.java
@@ -244,7 +244,7 @@ public enum Config {
             String.class,
             "network.loadbalancer.haproxy.stats.auth",
             "admin1:AdMiN123",
-            "Load Balancer(haproxy) authetication string in the format 
username:password",
+            "Load Balancer(haproxy) authentication string in the format 
username:password",
             null),
     NetworkLBHaproxyStatsPort(
             "Network",
@@ -426,7 +426,7 @@ public enum Config {
             "Console proxy command port that is used to communicate with 
management server",
             null),
     ConsoleProxyRestart("Console Proxy", AgentManager.class, Boolean.class, 
"consoleproxy.restart", "true", "Console proxy restart flag, defaulted to 
true", null),
-    ConsoleProxyUrlDomain("Console Proxy", AgentManager.class, String.class, 
"consoleproxy.url.domain", "", "Console proxy url domain", "domainName"),
+    ConsoleProxyUrlDomain("Console Proxy", AgentManager.class, String.class, 
"consoleproxy.url.domain", "", "Console proxy url domain", "domainName", 
"privateip"),
     ConsoleProxySessionMax(
             "Console Proxy",
             AgentManager.class,
@@ -1783,7 +1783,7 @@ public enum Config {
     private final String _name;
     private final String _defaultValue;
     private final String _description;
-    private final String _range;
+    private final String[] _range;
     private final String _scope; // Parameter can be at different levels 
(Zone/cluster/pool/account), by default every parameter is at global
 
     private static final HashMap<String, List<Config>> s_scopeLevelConfigsMap 
= new HashMap<String, List<Config>>();
@@ -1833,7 +1833,7 @@ public enum Config {
         }
     }
 
-    private Config(String category, Class<?> componentClass, Class<?> type, 
String name, String defaultValue, String description, String range) {
+    private Config(String category, Class<?> componentClass, Class<?> type, 
String name, String defaultValue, String description, String... range) {
         _category = category;
         _componentClass = componentClass;
         _type = type;
@@ -1896,7 +1896,7 @@ public enum Config {
         }
     }
 
-    public String getRange() {
+    public String[] getRange() {
         return _range;
     }
 
diff --git 
a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java 
b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
old mode 100755
new mode 100644
index b7ed11a61ab..7fa764d2f25
--- a/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
+++ b/server/src/main/java/com/cloud/configuration/ConfigurationManagerImpl.java
@@ -1103,8 +1103,8 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
             }
         }
         Class<?> type = null;
-        final Config c = Config.getConfig(name);
-        if (c == null) {
+        final Config configuration = Config.getConfig(name);
+        if (configuration == null) {
             s_logger.warn("Did not find configuration " + name + " in 
Config.java. Perhaps moved to ConfigDepot");
             final ConfigKey<?> configKey = _configDepot.get(name);
             if(configKey == null) {
@@ -1113,7 +1113,7 @@ public class ConfigurationManagerImpl extends ManagerBase 
implements Configurati
             }
             type = configKey.type();
         } else {
-            type = c.getType();
+            type = configuration.getType();
         }
         //no need to validate further if a
         //config can have null value.
@@ -1222,96 +1222,145 @@ public class ConfigurationManagerImpl extends 
ManagerBase implements Configurati
             }
         }
 
-        if(c == null ) {
+        if (configuration == null ) {
             //range validation has to be done per case basis, for now
             //return in case of Configkey parameters
             return null;
         }
 
-        final String range = c.getRange();
+        final String[] range = configuration.getRange();
         if (range == null) {
             return null;
         }
 
         if (type.equals(String.class)) {
-            if (range.equals("privateip")) {
-                try {
-                    if (!NetUtils.isSiteLocalAddress(value)) {
-                        s_logger.error("privateip range " + value + " is not a 
site local address for configuration variable " + name);
-                        return "Please enter a site local IP address.";
-                    }
-                } catch (final NullPointerException e) {
-                    s_logger.error("Error parsing ip address for " + name);
-                    throw new InvalidParameterValueException("Error parsing ip 
address");
-                }
-            } else if (range.equals("netmask")) {
-                if (!NetUtils.isValidIp4Netmask(value)) {
-                    s_logger.error("netmask " + value + " is not a valid net 
mask for configuration variable " + name);
-                    return "Please enter a valid netmask.";
-                }
-            } else if (range.equals("hypervisorList")) {
-                final String[] hypervisors = value.split(",");
-                if (hypervisors == null) {
-                    return "Please enter hypervisor list, separated by comma";
-                }
-                for (final String hypervisor : hypervisors) {
-                    if (HypervisorType.getType(hypervisor) == 
HypervisorType.Any || HypervisorType.getType(hypervisor) == 
HypervisorType.None) {
-                        return "Please enter a valid hypervisor type";
-                    }
-                }
-            } else if (range.equalsIgnoreCase("instanceName")) {
-                if (!NetUtils.verifyInstanceName(value)) {
-                    return "Instance name can not contain hyphen, space or 
plus sign";
-                }
-            } else if (range.equalsIgnoreCase("domainName")) {
-                String domainName = value;
-                if (value.startsWith("*")) {
-                    domainName = value.substring(2); //skip the "*."
-                }
-                //max length for FQDN is 253 + 2, code adds xxx-xxx-xxx-xxx to 
domain name when creating URL
-                if (domainName.length() >= 238 || 
!domainName.matches(DOMAIN_NAME_PATTERN)) {
-                    return "Please enter a valid string for domain name, 
prefixed with '*.' if applicable";
-                }
-            } else if (range.equals("routes")) {
-                final String[] routes = value.split(",");
-                for (final String route : routes) {
-                    if (route != null) {
-                        final String routeToVerify = route.trim();
-                        if (!NetUtils.isValidIp4Cidr(routeToVerify)) {
-                            throw new InvalidParameterValueException("Invalid 
value for route: " + route + " in deny list. Valid format is list"
-                                    + " of cidrs separated by coma. Example: 
10.1.1.0/24,192.168.0.0/24");
-                        }
-                    }
-                }
-            } else {
-                final String[] options = range.split(",");
-                for (final String option : options) {
-                    if (option.trim().equalsIgnoreCase(value)) {
-                        return null;
-                    }
-                }
-                s_logger.error("configuration value for " + name + " is 
invalid");
-                return "Please enter : " + range;
+            return validateIfStringValueIsInRange(name, value, range);
+        } else if (type.equals(Integer.class)) {
+            return validateIfIntValueIsInRange(name, value, range[0]);
+        }
+        return String.format("Invalid value for configuration [%s].", name);
+    }
 
+    /**
+     * A valid value should be an integer between min and max (the values from 
the range).
+     */
+    protected String validateIfIntValueIsInRange(String name, String value, 
String range) {
+        final String[] options = range.split("-");
+        final int min = Integer.parseInt(options[0]);
+        final int max = Integer.parseInt(options[1]);
+        final int val = Integer.parseInt(value);
+        if (val < min || val > max) {
+            s_logger.error(String.format("Invalid value for configuration 
[%s]. Please enter a value in the range [%s].", name, range));
+            return String.format("The provided value is not valid for this 
configuration. Please enter an integer in the range: [%s]", range);
+        }
+        return null;
+    }
+
+    /**
+     * Checks if the value for the configuration is valid for any of the 
ranges selected.
+     */
+    protected String validateIfStringValueIsInRange(String name, String value, 
String... range) {
+        List<String> message = new ArrayList<String>();
+        String errMessage = "";
+        for (String rangeOption : range) {
+            switch (rangeOption) {
+                case "privateip":
+                    errMessage = validateRangePrivateIp(name, value);
+                    break;
+                case "hypervisorList":
+                    errMessage = validateRangeHypervisorList(value);
+                    break;
+                case "instanceName":
+                    errMessage = validateRangeInstanceName(value);
+                    break;
+                case "domainName":
+                    errMessage = validateRangeDomainName(value);
+                    break;
+                default:
+                    errMessage = validateRangeOther(name, value, rangeOption);
+            }
+            if (StringUtils.isEmpty(errMessage)) {
+                return null;
             }
-        } else if (type.equals(Integer.class)) {
-            final String[] options = range.split("-");
-            if (options.length != 2) {
-                final String msg = "configuration range " + range + " for " + 
name + " is invalid";
-                s_logger.error(msg);
-                return msg;
+            message.add(errMessage);
+        }
+        if (message.size() == 1) {
+            return String.format("The provided value is not %s.", 
message.get(0));
+        }
+        return String.format("The provided value is neither %s.", 
String.join(" NOR ", message));
+    }
+
+    /**
+     * Checks if the value is a private IP according to {@link 
NetUtils#isSiteLocalAddress(String)}.
+     */
+    protected String validateRangePrivateIp(String name, String value) {
+        try {
+            if (NetUtils.isSiteLocalAddress(value)) {
+                return null;
             }
-            final int min = Integer.parseInt(options[0]);
-            final int max = Integer.parseInt(options[1]);
-            final int val = Integer.parseInt(value);
-            if (val < min || val > max) {
-                s_logger.error("configuration value for " + name + " is 
invalid");
-                return "Please enter : " + range;
+            s_logger.error(String.format("Value [%s] is not a valid private IP 
range for configuration [%s].", value, name));
+        } catch (final NullPointerException e) {
+            s_logger.error(String.format("Error while parsing IP address for 
[%s].", name));
+        }
+        return "a valid site local IP address";
+    }
+
+    /**
+     * Valid values are XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, 
BareMetal, Simulator, Ovm, Ovm3, LXC.
+     * Inputting "Any" will return the hypervisor type Any, other inputs will 
result in the hypervisor type none.
+     * Both of these are invalid values and will return an error message.
+     */
+    protected String validateRangeHypervisorList(String value) {
+        final String[] hypervisors = value.split(",");
+        for (final String hypervisor : hypervisors) {
+            if (HypervisorType.getType(hypervisor) == HypervisorType.Any || 
HypervisorType.getType(hypervisor) == HypervisorType.None) {
+                return "a valid hypervisor type";
             }
         }
         return null;
     }
 
+    /**
+     * Valid values are instance names, the only restriction is that they may 
not have hyphens, spaces or plus signs.
+     */
+    protected String validateRangeInstanceName(String value) {
+        if (NetUtils.verifyInstanceName(value)) {
+            return null;
+        }
+        return "a valid instance name (instance names cannot contain hyphens, 
spaces or plus signs)";
+    }
+
+    /**
+     * Verifies if the value is a valid domain name. If it starts with "*.", 
these two symbols are ignored and do not count towards the character limit.
+     * Max length for FQDN is 253 + 2, code adds xxx-xxx-xxx-xxx to domain 
name when creating URL.
+     */
+    protected String validateRangeDomainName(String value) {
+        String domainName = value;
+        if (value.startsWith("*")) {
+            domainName = value.substring(2);
+        }
+        if (domainName.length() >= 238 || 
!domainName.matches(DOMAIN_NAME_PATTERN)) {
+            return "a valid domain name";
+        }
+        return null;
+    }
+
+    /**
+     * In configurations where this type of range is used, a list of possible 
values is passed as argument in the creation of the configuration,
+     * a valid value is any option within this list.
+     */
+    protected String validateRangeOther(String name, String value, String 
rangeOption) {
+        final String[] options = rangeOption.split(",");
+        for (final String option : options) {
+            if (option.trim().equalsIgnoreCase(value)) {
+                return null;
+            }
+        }
+        s_logger.error(String.format("Invalid value for configuration [%s].", 
name));
+        return String.format("a valid value for this configuration (Options 
are: [%s])", rangeOption);
+    }
+
+
     private boolean podHasAllocatedPrivateIPs(final long podId) {
         final HostPodVO pod = _podDao.findById(podId);
         final int count = _privateIpAddressDao.countIPs(podId, 
pod.getDataCenterId(), true);
diff --git a/server/src/test/java/com/cloud/configuration/ConfigTest.java 
b/server/src/test/java/com/cloud/configuration/ConfigTest.java
new file mode 100644
index 00000000000..1c9b2e71972
--- /dev/null
+++ b/server/src/test/java/com/cloud/configuration/ConfigTest.java
@@ -0,0 +1,42 @@
+// 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.configuration;
+
+import org.junit.Test;
+
+public class ConfigTest {
+    @Test
+    public void configTestIntegerRange() {
+        for (Config configuration : Config.values()) {
+            if (configuration.getType().equals(Integer.class) && 
configuration.getRange() != null) {
+                try {
+                    final String[] options = 
configuration.getRange()[0].split("-");
+                    final int min = Integer.parseInt(options[0]);
+                    final int max = Integer.parseInt(options[1]);
+                    if (options.length != 2) {
+                        throw new AssertionError(String.format("Invalid range 
for configuration [%s], a valid value for the range should be two integers 
separated by [-].", configuration.toString()));
+                    }
+                    if (min > max) {
+                        throw new AssertionError(String.format("Invalid range 
for configuration [%s], the second value should be greater than the first.", 
configuration.toString()));
+                    }
+                } catch (java.lang.NumberFormatException e) {
+                    throw new AssertionError(String.format("Invalid range for 
configuration [%s], a valid value for the range should be two integers 
separated by [-].", configuration.toString()));
+                }
+            }
+        }
+    }
+}
diff --git 
a/server/src/test/java/com/cloud/configuration/ConfigurationManagerImplTest.java
 
b/server/src/test/java/com/cloud/configuration/ConfigurationManagerImplTest.java
new file mode 100644
index 00000000000..324ce7f9cbc
--- /dev/null
+++ 
b/server/src/test/java/com/cloud/configuration/ConfigurationManagerImplTest.java
@@ -0,0 +1,194 @@
+// 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.configuration;
+
+import com.cloud.utils.net.NetUtils;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mockito;
+import org.powermock.api.mockito.PowerMockito;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
+
+import java.util.List;
+
+
+@RunWith(PowerMockRunner.class)
+@PrepareForTest(NetUtils.class)
+public class ConfigurationManagerImplTest {
+    ConfigurationManagerImpl configurationManagerImplSpy = Mockito.spy(new 
ConfigurationManagerImpl());
+    @Test
+    public void validateIfIntValueIsInRangeTestValidValueReturnNull() {
+        String testVariable = 
configurationManagerImplSpy.validateIfIntValueIsInRange("String name", "3", 
"1-5");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void validateIfIntValueIsInRangeTestInvalidValueReturnString() {
+        String testVariable = 
configurationManagerImplSpy.validateIfIntValueIsInRange("String name", "9", 
"1-5");
+        Assert.assertNotNull(testVariable);
+    }
+
+    @Test
+    public void validateIfStringValueIsInRangeTestValidValuesReturnNull() {
+        String testVariable = "";
+        List<String> methods = List.of("privateip", "hypervisorList", 
"instanceName", "domainName", "default");
+        
Mockito.doReturn(null).when(configurationManagerImplSpy).validateRangePrivateIp(Mockito.anyString(),
 Mockito.anyString());
+        
Mockito.doReturn(null).when(configurationManagerImplSpy).validateRangeHypervisorList(Mockito.anyString());
+        
Mockito.doReturn(null).when(configurationManagerImplSpy).validateRangeInstanceName(Mockito.anyString());
+        
Mockito.doReturn(null).when(configurationManagerImplSpy).validateRangeDomainName(Mockito.anyString());
+        
Mockito.doReturn(null).when(configurationManagerImplSpy).validateRangeOther(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyString());
+        for (String method : methods) {
+            testVariable = 
configurationManagerImplSpy.validateIfStringValueIsInRange("name", "value", 
method);
+            Assert.assertNull(testVariable);
+        }
+    }
+
+    @Test
+    public void validateIfStringValueIsInRangeTestInvalidValuesReturnString() {
+        String testVariable = "";
+        List<String> methods = List.of("privateip", "hypervisorList", 
"instanceName", "domainName", "default");
+        
Mockito.doReturn("returnMsg").when(configurationManagerImplSpy).validateRangePrivateIp(Mockito.anyString(),
 Mockito.anyString());
+        
Mockito.doReturn("returnMsg").when(configurationManagerImplSpy).validateRangeHypervisorList(Mockito.anyString());
+        
Mockito.doReturn("returnMsg").when(configurationManagerImplSpy).validateRangeInstanceName(Mockito.anyString());
+        
Mockito.doReturn("returnMsg").when(configurationManagerImplSpy).validateRangeDomainName(Mockito.anyString());
+        
Mockito.doReturn("returnMsg").when(configurationManagerImplSpy).validateRangeOther(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyString());
+        for (String method : methods) {
+            testVariable = 
configurationManagerImplSpy.validateIfStringValueIsInRange("name", "value", 
method);
+            Assert.assertEquals("The provided value is not returnMsg.", 
testVariable);
+        }
+    }
+
+
+    @Test
+    public void 
validateIfStringValueIsInRangeTestMultipleRangesValidValueReturnNull() {
+        
Mockito.doReturn("returnMsg1").when(configurationManagerImplSpy).validateRangePrivateIp(Mockito.anyString(),
 Mockito.anyString());
+        
Mockito.doReturn(null).when(configurationManagerImplSpy).validateRangeInstanceName(Mockito.anyString());
+        
Mockito.doReturn("returnMsg2").when(configurationManagerImplSpy).validateRangeOther(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyString());
+        String testVariable = 
configurationManagerImplSpy.validateIfStringValueIsInRange("name", "value", 
"privateip", "instanceName", "default");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void 
validateIfStringValueIsInRangeTestMultipleRangesInvalidValueReturnMessages() {
+        
Mockito.doReturn("returnMsg1").when(configurationManagerImplSpy).validateRangePrivateIp(Mockito.anyString(),
 Mockito.anyString());
+        
Mockito.doReturn("returnMsg2").when(configurationManagerImplSpy).validateRangeInstanceName(Mockito.anyString());
+        
Mockito.doReturn("returnMsg3").when(configurationManagerImplSpy).validateRangeOther(Mockito.anyString(),
 Mockito.anyString(), Mockito.anyString());
+        String testVariable = 
configurationManagerImplSpy.validateIfStringValueIsInRange("name", "value", 
"privateip", "instanceName", "default");
+        Assert.assertEquals("The provided value is neither returnMsg1 NOR 
returnMsg2 NOR returnMsg3.", testVariable);
+    }
+
+
+    @Test
+    public void validateRangePrivateIpTestValidValueReturnNull() {
+        PowerMockito.mockStatic(NetUtils.class);
+        
PowerMockito.when(NetUtils.isSiteLocalAddress(Mockito.anyString())).thenReturn(true);
+        String testVariable = 
configurationManagerImplSpy.validateRangePrivateIp("name", "value");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void validateRangePrivateIpTestInvalidValueReturnString() {
+        PowerMockito.mockStatic(NetUtils.class);
+        
PowerMockito.when(NetUtils.isSiteLocalAddress(Mockito.anyString())).thenReturn(false);
+        String testVariable = 
configurationManagerImplSpy.validateRangePrivateIp("name", "value");
+        Assert.assertEquals("a valid site local IP address", testVariable);
+    }
+
+    @Test
+    public void validateRangeHypervisorListTestValidValueReturnNull() {
+        String testVariable = 
configurationManagerImplSpy.validateRangeHypervisorList("Ovm3,VirtualBox,KVM,VMware");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void validateRangeHypervisorListTestInvalidValueReturnString() {
+        String testVariable = 
configurationManagerImplSpy.validateRangeHypervisorList("Ovm3,VirtualBox,KVM,VMware,Any,InvalidHypervisorName");
+        Assert.assertEquals("a valid hypervisor type", testVariable);
+    }
+
+    @Test
+    public void validateRangeInstanceNameTestValidValueReturnNull() {
+        PowerMockito.mockStatic(NetUtils.class);
+        
PowerMockito.when(NetUtils.verifyInstanceName(Mockito.anyString())).thenReturn(true);
+        String testVariable = 
configurationManagerImplSpy.validateRangeInstanceName("ThisStringShouldBeValid");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void validateRangeInstanceNameTestInvalidValueReturnString() {
+        PowerMockito.mockStatic(NetUtils.class);
+        
PowerMockito.when(NetUtils.verifyInstanceName(Mockito.anyString())).thenReturn(false);
+        String testVariable = 
configurationManagerImplSpy.validateRangeInstanceName("This string should not 
be valid.");
+        Assert.assertEquals("a valid instance name (instance names cannot 
contain hyphen, space or plus sign)", testVariable);
+    }
+
+    @Test
+    public void 
validateRangeDomainNameTestValueDoesNotStartWithStarAndIsAValidValueReturnNull()
 {
+        String testVariable = 
configurationManagerImplSpy.validateRangeDomainName("ThisStringShould.Work");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void 
validateRangeDomainNameTestValueDoesNotStartWithStarAndIsAValidValueButIsOver238charactersLongReturnString()
 {
+        String testVariable = 
configurationManagerImplSpy.validateRangeDomainName("ThisStringDoesNotStartWithStarAndIsOverTwoHundredAndForty.CharactersLongWithAtLeast"
 +
+                
"OnePeriodEverySixtyFourLetters.ThisShouldCauseAnErrorBecauseItIsTooLong.TheRestOfThisAreRandomlyGeneratedCharacters.gNXhNOBNTNAoMCQqJMzcvFSBwHUhmWHftjfTNUaHR");
+        Assert.assertEquals("a valid domain name", testVariable);
+    }
+
+    @Test
+    public void 
validateRangeDomainNameTestValueDoesNotStartWithStarAndIsNotAValidValueReturnString()
 {
+        String testVariable = 
configurationManagerImplSpy.validateRangeDomainName("ThisStringDoesNotMatchThePatternFor.DomainNamesSinceItHas1NumberInTheLastPartOfTheString");
+        Assert.assertEquals("a valid domain name", testVariable);
+    }
+
+    @Test
+    public void 
validateRangeDomainNameTestValueStartsWithStarAndIsAValidValueReturnNull() {
+
+        String testVariable = 
configurationManagerImplSpy.validateRangeDomainName("*.ThisStringStartsWithAStarAndAPeriod.ThisShouldWorkEvenThoughItIsOverTwoHundredAnd"
 +
+                
"ThirtyEight.CharactersLong.BecauseTheFirstTwoCharactersAreIgnored.TheRestOfThisStringWasRandomlyGenerated.MgTUerXPlLyMaUpKTjAhxasFYRCfNCXmtWDwqSDOcTjASWlAXS");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void 
validateRangeDomainNameTestValueStartsWithStarAndIsAValidValueButIsOver238charactersLongReturnString()
 {
+
+        String testVariable = 
configurationManagerImplSpy.validateRangeDomainName("*.ThisStringStartsWithStarAndIsOverTwoHundredAndForty.CharactersLongWithAtLeastOnePeriod"
 +
+                
"EverySixtyFourLetters.ThisShouldCauseAnErrorBecauseItIsTooLong.TheRestOfThisAreRandomlyGeneratedCharacters.gNXNOBNTNAoMChQqJMzcvFSBwHUhmWHftjfTNUaHRKVyXm");
+        Assert.assertEquals("a valid domain name", testVariable);
+    }
+
+    @Test
+    public void 
validateRangeDomainNameTestValueStartsWithStarAndIsNotAValidValueReturnString() 
{
+
+        String testVariable = 
configurationManagerImplSpy.validateRangeDomainName("*.ThisStringDoesNotMatchThePatternFor.DomainNamesSinceItHas1NumberInTheLastPartOfTheString");
+        Assert.assertEquals("a valid domain name", testVariable);
+    }
+
+    @Test
+    public void validateRangeOtherTestValidValueReturnNull() {
+        String testVariable = 
configurationManagerImplSpy.validateRangeOther("NameTest1", "SoShouldThis", 
"ThisShouldWork,ThisShouldAlsoWork,SoShouldThis");
+        Assert.assertNull(testVariable);
+    }
+
+    @Test
+    public void validateRangeOtherTestInvalidValueReturnString() {
+        String testVariable = 
configurationManagerImplSpy.validateRangeOther("NameTest1", 
"ThisShouldNotWork", "ThisShouldWork,ThisShouldAlsoWork,SoShouldThis");
+        Assert.assertNotNull(testVariable);
+    }
+}

Reply via email to