/* * Copyright (c) 2015 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource; import com.emc.storageos.model.valid.Endpoint; import com.emc.storageos.model.valid.EnumType; import com.emc.storageos.model.valid.Length; import com.emc.storageos.model.valid.Range; import com.emc.storageos.svcs.errorhandling.resources.BadRequestException; import org.junit.Test; import javax.xml.bind.annotation.XmlElement; import java.util.ArrayList; import java.util.List; public class InputValidatorTest { @Test public void testHappyPath() { validate(newFieldObject()); } /* * Field Tests */ @Test(expected = BadRequestException.class) public void testFieldsFailRequired() { ValidateFields testObj = newFieldObject(); testObj.requiredField = null; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsFailNillable() { ValidateFields testObj = newFieldObject(); testObj.requiredField = ""; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsFailEnum() { ValidateFields testObj = newFieldObject(); testObj.enumeration = "BAD"; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsMaxNumber() { ValidateFields testObj = newFieldObject(); testObj.number = 5000; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsMinNumber() { ValidateFields testObj = newFieldObject(); testObj.number = 0; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsLongString() { ValidateFields testObj = newFieldObject(); testObj.label = "asdfasdfasdfasdfasdfasdfasdfasdfasdfassajlkafsdljkdfsakjldafsjkladfskljdfasjkladfslkjadfsljkfdsalkjdfsakldfsaljkafdsljkafskjlsafdljkfsdaljkafsdljkfadslkjaflsdjklfasdkjlfjkadsljkfasddfasdfjhadsfjkhfdhjkdsfhjfdshjkdfskhjsdfkjhsdfkjhsdf"; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsShortString() { ValidateFields testObj = newFieldObject(); testObj.label = "a"; validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsCollection() { ValidateFields testObj = newFieldObject(); testObj.values.add("a"); validate(testObj); } @Test(expected = BadRequestException.class) public void testFieldsNonIp() { ValidateFields testObj = newFieldObject(); testObj.ip = "3.34"; validate(testObj); } private ValidateFields newFieldObject() { ValidateFields testObj = new ValidateFields(); testObj.requiredField = "hi"; testObj.nillable = ""; testObj.enumeration = ValidateEnum.B.toString(); testObj.number = 3; testObj.label = "abc"; testObj.values.add("abc"); testObj.ip = "127.0.0.1"; return testObj; } /* * Properties Tests */ @Test(expected = BadRequestException.class) public void testPropsFailRequired() { ValidateProperties testObj = newPropObject(); testObj.setRequiredField(null); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsFailNillable() { ValidateProperties testObj = newPropObject(); testObj.setRequiredField(""); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsFailEnum() { ValidateProperties testObj = newPropObject(); testObj.setEnumeration("BAD"); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsMaxNumber() { ValidateProperties testObj = newPropObject(); testObj.setNumber(5000); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsMinNumber() { ValidateProperties testObj = newPropObject(); testObj.setNumber(0); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsLongString() { ValidateProperties testObj = newPropObject(); testObj.setLabel("asdfasdfasdfasdfasdfasdfasdfasdfasdfassajlkafsdljkdfsakjldafsjkladfskljdfasjkladfslkjadfsljkfdsalkjdfsakldfsaljkafdsljkafskjlsafdljkfsdaljkafsdljkfadslkjaflsdjklfasdkjlfjkadsljkfasddfasdfjhadsfjkhfdhjkdsfhjfdshjkdfskhjsdfkjhsdfkjhsdf"); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsShortString() { ValidateProperties testObj = newPropObject(); testObj.setLabel("a"); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsCollection() { ValidateProperties testObj = newPropObject(); testObj.getValues().add("a"); validate(testObj); } @Test(expected = BadRequestException.class) public void testPropsNonIp() { ValidateProperties testObj = newPropObject(); testObj.setIp("3.34"); validate(testObj); } private ValidateProperties newPropObject() { ValidateProperties testObj = new ValidateProperties(); testObj.setRequiredField("hi"); testObj.setNillable(""); testObj.setEnumeration(ValidateEnum.B.toString()); testObj.setNumber(3); testObj.setLabel("abc"); testObj.getValues().add("abc"); testObj.setIp("127.0.0.1"); return testObj; } private void validate(Object obj) { InputValidator.getInstance().validate(obj); } private enum ValidateEnum { A, B, C } private class ValidateFields { @XmlElement(required = true, nillable = false) public String requiredField; @XmlElement(nillable = true) public String nillable; @EnumType(ValidateEnum.class) public String enumeration; @Range(min = 2, max = 128) public Integer number; @Length(min = 2, max = 128) public String label; @Length(min = 2, max = 128) public List<String> values = new ArrayList<String>(); @Endpoint(type = Endpoint.EndpointType.IPV4) public String ip; } private class ValidateProperties { private String requiredField; private String nillable; private String enumeration; private Integer number; private String label; private List<String> values; private String ip; @XmlElement(required = true, nillable = false) public String getRequiredField() { return requiredField; } public void setRequiredField(String requiredField) { this.requiredField = requiredField; } @XmlElement(nillable = true) public String getNillable() { return nillable; } public void setNillable(String nillable) { this.nillable = nillable; } @EnumType(ValidateEnum.class) public String getEnumeration() { return enumeration; } public void setEnumeration(String enumeration) { this.enumeration = enumeration; } @Range(min = 2, max = 128) public Integer getNumber() { return number; } public void setNumber(Integer number) { this.number = number; } @Length(min = 2, max = 128) public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } @Length(min = 2, max = 128) public List<String> getValues() { if (values == null) { values = new ArrayList<String>(); } return values; } public void setValues(List<String> values) { this.values = values; } @Endpoint(type = Endpoint.EndpointType.IPV4) public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } } }