/** * Copyright (c) 2009--2010 Red Hat, Inc. * * This software is licensed to you under the GNU General Public License, * version 2 (GPLv2). There is NO WARRANTY for this software, express or * implied, including the implied warranties of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2 * along with this software; if not, see * http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt. * * Red Hat trademarks are not licensed under GPLv2. No permission is * granted to use or replicate Red Hat trademarks that are incorporated * in this software or its documentation. */ package com.redhat.rhn.common.validator.test; import com.redhat.rhn.common.validator.Constraint; import com.redhat.rhn.common.validator.DataConverter; import com.redhat.rhn.common.validator.Validator; import com.redhat.rhn.testing.TestUtils; import java.util.Date; import junit.framework.TestCase; /** * ValidatorTest * @version $Rev$ */ public class ValidatorTest extends TestCase { private Validator validator; public void setUp() throws Exception { TestUtils.disableLocalizationLogging(); validator = Validator.getInstance(TestUtils.findTestData("TestObject.xsd")); } /** * {@inheritDoc} */ protected void tearDown() throws Exception { TestUtils.enableLocalizationLogging(); super.tearDown(); } public void testDataConverter() throws Exception { DataConverter dc = DataConverter.getInstance(); assertNotNull(dc.getJavaType("date")); assertNotNull(dc.getJavaType("string")); assertNotNull(dc.getJavaType("long")); assertNotNull(dc.getSchemaType("Date")); assertNotNull(dc.getSchemaType("String")); assertNotNull(dc.getSchemaType("Long")); } public void testGetConstraints() { assertTrue(validator.getConstraints().size() > 0); Object constraint = validator.getConstraints().get(0); assertTrue(constraint instanceof Constraint); } public void testNullValue() throws Exception { TestObject to = new TestObject(); assertNotNull(validator.isValid("stringField", to)); } public void testStringLength() throws Exception { TestObject to = new TestObject(); to.setStringField("short"); assertNull(validator.isValid("stringField", to)); to.setStringField("somethingthatistoolongandshouldfail"); assertNotNull(validator.isValid("stringField", to)); to.setStringField(""); assertNotNull(validator.isValid("stringField", to)); to.setStringField(" "); assertNotNull(validator.isValid("stringField", to)); to.setTwoCharField("it"); assertNull(validator.isValid("twoCharField", to)); } public void testASCIIString() throws Exception { TestObject to = new TestObject(); to.setAsciiString("shughes_login"); assertNull(validator.isValid("asciiString", to)); to.setAsciiString("機能拡張を"); assertNotNull(validator.isValid("asciiString", to)); } public void testUserNameString() throws Exception { TestObject to = new TestObject(); // bad user names to.setUsernameString("foo&user"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("joe+page"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("joe user"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("10%users"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("joe'suser"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("`eval`"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("joe=page"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("foo#user"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("joe\"user"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("機能拡張を"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("shughes login"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString("shughes%login"); assertNotNull(validator.isValid("usernameString", to)); to.setUsernameString(" shughes"); assertNotNull(validator.isValid("usernameString", to)); // good user names to.setUsernameString("john.cusack@foobar.com"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("a$user"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("!@$^*()-_{}[]|\\:;?"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("/usr/bin"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("shughes_login"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("shughes@redhat.com"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("/shughes_login"); assertNull(validator.isValid("usernameString", to)); to.setUsernameString("/\\/\\ark"); assertNull(validator.isValid("usernameString", to)); } public void testPosixUsername() { TestObject to = new TestObject(); // valid user names to.setPosixString("ab"); assertNull(validator.isValid("posixString", to)); to.setPosixString("AB"); assertNull(validator.isValid("posixString", to)); to.setPosixString("09"); assertNull(validator.isValid("posixString", to)); to.setPosixString("aA0"); assertNull(validator.isValid("posixString", to)); to.setPosixString("_-."); assertNull(validator.isValid("posixString", to)); to.setPosixString("a_B-0.Z"); assertNull(validator.isValid("posixString", to)); to.setPosixString("shughes_login"); assertNull(validator.isValid("posixString", to)); // Should fail to.setPosixString("-ab"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("john.cusack@foobar.com"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("a$user"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("!@$^*()-_{}[]|\\:;?"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("/usr/bin"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("shughes@redhat.com"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("/shughes_login"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("/\\/\\ark"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("foo&user"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("joe+page"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("joe user"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("10%users"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("joe'suser"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("`eval`"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("joe=page"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("foo#user"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("joe\"user"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("機能拡張を"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("shughes login"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString("shughes%login"); assertNotNull(validator.isValid("posixString", to)); to.setPosixString(" shughes"); assertNotNull(validator.isValid("posixString", to)); } public void testDateField() throws Exception { TestObject to = new TestObject(); to.setDateField(new Date()); assertNull(validator.isValid("dateField", to)); } public void testLongField() throws Exception { TestObject to = new TestObject(); to.setLongField(new Long(10)); assertNull(validator.isValid("longField", to)); to.setLongField(new Long(100)); assertNotNull(validator.isValid("longField", to)); assertNotNull(validator.isValid("numberString", to)); to.setNumberString("0.5"); assertNotNull(validator.isValid("numberString", to)); to.setNumberString(".5"); assertNotNull(validator.isValid("numberString", to)); to.setNumberString("1"); assertNull(validator.isValid("numberString", to)); } /** TODO: Implement the multi-value fields */ public void testMultiValueField() throws Exception { TestObject to = new TestObject(); to.setStringField("ZZZ"); to.setCompoundField("something"); assertNull(validator.isValid("compoundField", to)); to.setStringField("XXX"); assertNull(validator.isValid("compoundField", to)); to.setStringField("INVALID"); assertNull(validator.isValid("compoundField", to)); to.setCompoundField(null); assertNull(validator.isValid("compoundField", to)); to.setStringField("XXX"); assertNotNull(validator.isValid("compoundField", to)); // Check that the length constraints work too to.setCompoundField("somethingmorethan20characterslong"); assertNotNull(validator.isValid("compoundField", to)); } public void testRequiredIfConstraint() { TestObject to = new TestObject(); //init both to empty strings to.setStringField(""); to.setSecondStringField(""); // Make sure that when both are null/empty, everything is ok assertNull(validator.isValid("secondStringField", to)); // If the secondStringField is required if stringField is not null to.setStringField("foo"); assertNotNull(validator.isValid("secondStringField", to)); // Set both to something and it should be valid to.setSecondStringField("bar"); assertNull(validator.isValid("secondStringField", to)); // Since stringField isn't ZZZ or XXX this should // be OK assertNull(validator.isValid("secondLongField", to)); to.setStringField("ZZZ"); // Now it should fail assertNotNull(validator.isValid("secondLongField", to)); } }