/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.systemservices.impl.validate;
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import com.emc.storageos.db.client.model.EncryptionProvider;
import com.emc.storageos.model.property.PropertiesMetadata;
import com.emc.storageos.svcs.errorhandling.resources.BadRequestException;
@ContextConfiguration(locations = { "/sys-metadata-var.xml" })
public class PropertiesConfigurationValidatorTest extends
AbstractJUnit4SpringContextTests {
PropertiesMetadata data = null;
PropertiesConfigurationValidator validator;
@Before
public void setUp() {
validator = new PropertiesConfigurationValidator();
data = (PropertiesMetadata) applicationContext.getBean("metadata");
validator.setPropertiesMetadata(data);
validator.setEncryptionProvider(new TestEncryptionProvider());
}
@Test
public void testIpv4Addr() {
validator.getValidPropValue("network_gateway",
"10.247.96.1", false);
try {
validator.getValidPropValue("network_gateway",
"10.247.96.256", false);
Assert.fail();
} catch (BadRequestException e) {
Assert.assertTrue(true);
}
try {
validator.getValidPropValue("network_gateway",
"xxx", false);
Assert.fail();
} catch (BadRequestException e) {
Assert.assertTrue(true);
}
try {
validator.getValidPropValue("network_gateway",
"2620:0:170:2842::1", false);
Assert.fail();
} catch (BadRequestException e) {
Assert.assertTrue(true);
}
}
@Test
public void testIpv6Addr() {
validator.getValidPropValue("network_gateway6", "2620:0:170:2842::1", false);
try {
validator.getValidPropValue("network_gateway6", "G620:0:170:2842::1", false);
Assert.fail();
} catch (BadRequestException e) {
Assert.assertTrue(true);
}
try {
validator.getValidPropValue("network_gateway6", "xxxx", false);
Assert.fail();
} catch (BadRequestException e) {
Assert.assertTrue(true);
}
try {
validator.getValidPropValue("network_gateway6", "10.247.100.11", false);
Assert.fail();
} catch (BadRequestException e) {
Assert.assertTrue(true);
}
}
@Test
public void testUrl() {
Assert.assertTrue(validator.getValidPropValue("system_update_repo",
"http://lglaf020.lss.emc.com/ovf/Bourne/", true) != null);
try {
validator.getValidPropValue("system_update_repo",
"lglaf020.lss.emc.com/ovf/Bourne/", true);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(true);
}
}
@Test
public void testEmail() {
Assert.assertTrue(validator.getValidPropValue("system_connectemc_smtp_to",
"DONOTREPLY@emc.com", true) != null);
try {
validator.getValidPropValue("system_connectemc_smtp_to",
"noemail", true);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(true);
}
}
@Test
public void testMaxLength() {
String longString =
("1234567890123456789012345678901234567890123456789012345678901234567890");
String validString = ("10.247.11.9");
try {
validator.getValidPropValue("network_ntpservers",
longString, true);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(true);
}
Assert.assertTrue(validator.getValidPropValue("network_ntpservers",
validString, true) != null);
}
@Test
public void testMinLength() {
String validString = ("10.247.11.9");
String shortString = ("123456");
try {
validator.getValidPropValue("network_ntpservers", shortString, true);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(true);
}
Assert.assertTrue(validator.getValidPropValue("network_ntpservers",
validString, true) != null);
}
@Test
public void testNonMutableField() {
try {
validator.getValidPropValue("config_version", "bad version", true);
Assert.fail();
} catch (Exception e) {
Assert.assertTrue(true);
}
}
@Test
public void testValidHostName() {
Assert.assertTrue(PropertiesConfigurationValidator.validateHostName("corpusfep3.emc.com"));
}
@Test
public void testHostNameStartingWithPeriod() {
Assert.assertFalse(PropertiesConfigurationValidator.validateHostName(".corpusfep3.emc.com"));
}
@Test
public void testHostNameStartingWithUnderbar() {
Assert.assertFalse(PropertiesConfigurationValidator.validateHostName("_abc.corpusfep3.emc.com"));
}
@Test
public void testHostNameStartingWithLableGreaterThan63() {
String label = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; // 64 chars.
String hostname = label + ".emc.com";
Assert.assertFalse(PropertiesConfigurationValidator.validateHostName(hostname));
}
@Test
public void testHostNameStartingGreaterThan255() {
String label = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"; // 63 chars.
String hostname = label + "." + label + "." + label + "." + label + ".extrachars";
Assert.assertFalse(PropertiesConfigurationValidator.validateHostName(hostname));
}
@Test
public void testHostNameUsingValidIpAddress() {
Assert.assertTrue(PropertiesConfigurationValidator.validateHostName("10.247.96.1"));
}
@Test
public void testEncryptedString() throws UnsupportedEncodingException {
TestEncryptionProvider provider = new TestEncryptionProvider();
String encryptedString = validator.getValidPropValue("system_update_password", "password", true);
Assert.assertEquals(provider.getEncryptedString("ENCRYPTED"), encryptedString);
}
@Test
public void testUint16() {
Assert.assertTrue(PropertiesConfigurationValidator.validateUint16("0"));
Assert.assertTrue(PropertiesConfigurationValidator.validateUint16("65535"));
Assert.assertFalse(PropertiesConfigurationValidator.validateUint16("65536"));
Assert.assertFalse(PropertiesConfigurationValidator.validateUint16("-1"));
Assert.assertFalse(PropertiesConfigurationValidator.validateUint16("x"));
}
@Test
public void testUint8() {
Assert.assertTrue(PropertiesConfigurationValidator.validateUint8("0"));
Assert.assertTrue(PropertiesConfigurationValidator.validateUint8("255"));
Assert.assertFalse(PropertiesConfigurationValidator.validateUint8("256"));
Assert.assertFalse(PropertiesConfigurationValidator.validateUint8("-1"));
Assert.assertFalse(PropertiesConfigurationValidator.validateUint8("x"));
}
private class TestEncryptionProvider implements EncryptionProvider {
@Override
public void start() {
}
@Override
public byte[] encrypt(String input) {
try {
return "ENCRYPTED".getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
@Override
public String getEncryptedString(String input) {
byte[] data = encrypt(input);
try {
return new String(Base64.encodeBase64(data), "UTF-8");
} catch (UnsupportedEncodingException e) {
// All JVMs must support UTF-8, this really can never happen
throw new RuntimeException(e);
}
}
@Override
public String decrypt(byte[] input) {
return null;
}
}
}