def test_positive(self): self.p = IntegerValidator('positive', positive=True) try: self.p.validate(0) except Invalid: self.fail('0 is positive') try: self.p.validate('0') except Invalid: self.fail('0 is positive') try: self.p.validate(123) except Invalid: self.fail('123 is positive') with self.assertRaises(Invalid): self.p.validate(-1) with self.assertRaises(Invalid): self.p.validate('0xff') with self.assertRaises(Invalid): self.p.validate('-1')
class DNSZoneValidator(InputParser): comment = StringValidator('comment', permit_empty=True, length=512, required=False) refresh = IntegerValidator('refresh', positive=True, min=1, max=2419199, required=False) retry = IntegerValidator('retry', positive=True, min=1, max=2419199, required=False) expire = IntegerValidator('expire', positive=True, min=1, max=2419199, required=False) ttl = IntegerValidator('ttl', positive=True, min=1, max=2419199, required=False) rname = StringValidator('rname', permit_empty=False, length=256, required=False, chars=string.ascii_letters + '-.' + string.digits) record_ttl = IntegerValidator('record_ttl', positive=True, min=1, max=2419199, required=False)
class DNSRecordValidator(InputParser): # All common validators #user_id = UserIDValidator('user_id') #domain_id = IntegerValidator('domain_id', positive=True, required=True) valid_characters = string.ascii_letters + '-.' + string.digits # Type is already validated at select_parser comment = StringValidator('comment', permit_empty=True, length=512, required=False) type = StringValidator('type', permit_empty=False, length=5, required=True, chars=valid_characters) key = StringValidator('key', permit_empty=False, length=5120, required=True, chars=valid_characters) ttl = IntegerValidator('ttl', required=False, max=4294967295, min=1, positive=True) priority = ListValueValidator('priority', allowed_values=['', None, 0], required=False)
class MXRecordValidator(DNSRecordValidator): """ Validate MX-record """ priority = IntegerValidator('priority', positive=True, min=1, max=65535, required=True) value = StringValidator('value', permit_empty=False, required=True)
def test_max(self): self.p = IntegerValidator('max', max=128) try: self.p.validate(0) except Invalid: self.fail('0 is smaller than 128') try: self.p.validate('0') except Invalid: self.fail('0 is smaller than 128') try: self.p.validate(128) except Invalid: self.fail('128 is valid if max=128') with self.assertRaises(Invalid): self.p.validate(129) with self.assertRaises(Invalid): self.p.validate(100000)
class PortAddValidator(InputParser): user_id = UserIDValidator('user_id') service_group_id = IntegerValidator('service_group_id', positive=True, required=True)
class DNSRecordQueryValidator(DNSQueryValidator): dns_record_id = IntegerValidator('dns_record_id', required=False, max=4294967295, min=1, positive=True)
class DNSQueryValidator(InputParser): user_id = UserIDValidator('user_id') domain_id = IntegerValidator('domain_id', positive=True, required=True)
def setUp(self): self.p = IntegerValidator('id')
class RepositoryGetValidator(InputParser): user_id = UserIDValidator('user_id') limit = IntegerValidator('limit', positive = True, required = False) offset = IntegerValidator('offset', positive = True, required = False)
class SimpleInput(InputParser): name = StringValidator('name') number = IntegerValidator('number')
def test_default(self): self.p = IntegerValidator('name', default=1) self.assertEqual(self.p.default, 1)
def setUp(self): self.p = DomainValidator('domain')
class TestDomainValidator(unittest.TestCase): def setUp(self): self.p = DomainValidator('domain') def test_init(self): self.assertEqual(self.p.name, 'domain') self.assertEqual(self.p.default, None) self.assertTrue(self.p.required) def test_valid_input(self): try: self.p.validate('example.com') except Invalid: self.fail('Valid input to should not raise "Invalid" exception') try: self.p.validate('yx.fi') except Invalid: self.fail('Valid input to should not raise "Invalid" exception') try: self.p.validate('asfasfasfasdfasfasdfasdfasdfasdfasdf.com') except Invalid: self.fail('Valid input to should not raise "Invalid" exception') try: self.p.validate('xn--4caaa.fi') except Invalid: self.fail('Valid input to should not raise "Invalid" exception') def test_invalid_input(self): with self.assertRaises(Invalid): self.p.validate('') with self.assertRaises(Invalid): self.p.validate(None) with self.assertRaises(Invalid): self.p.validate('a') with self.assertRaises(Invalid): self.p.validate(type) with self.assertRaises(Invalid): self.p.validate('.example.com') with self.assertRaises(Invalid): self.p.validate('example') with self.assertRaises(Invalid): self.p.validate('yx') with self.assertRaises(Invalid): self.p.validate('asdf') with self.assertRaises(Invalid): self.p.validate('asdf\x00.fi') def test_default(self): self.p = IntegerValidator('name', default=1) self.assertEqual(self.p.default, 1)
class AnotherInput(SimpleInput): userid = IntegerValidator('userid')
class PortIDValidator(InputParser): user_id = UserIDValidator('user_id') port_id = IntegerValidator('port_id', positive=True, required=True)
class RepositoryIDValidator(InputParser): user_id = UserIDValidator('user_id') repo_id = IntegerValidator('repo_id', positive = True, required = True) type = ListValueValidator('type', allowed_values=['svn', 'git'], required = True)
class DNSGetValidator(InputParser): user_id = UserIDValidator('user_id') domain_id = IntegerValidator('domain_id', positive=True, required=True) limit = IntegerValidator('limit', positive=True, required=False) offset = IntegerValidator('offset', positive=True, required=False)
class RepositoryAddValidator(InputParser): user_id = UserIDValidator('user_id') service_group_id = IntegerValidator('service_group_id', positive = True, required = True) name = StringValidator('name', required = True) type = ListValueValidator('type', allowed_values=['svn', 'git'], required = True)
class TestIntegerValidator(unittest.TestCase): def setUp(self): self.p = IntegerValidator('id') def test_init(self): self.assertEqual(self.p.name, 'id') self.assertEqual(self.p.default, None) self.assertTrue(self.p.required) def test_valid_input(self): try: self.p.validate(1) except Invalid: self.fail('Valid input to should not raise "Invalid" exception') try: self.p.validate(1 * 10000000) except Invalid: self.fail('Valid input to should not raise "Invalid" exception') try: self.p.validate('123') except Invalid: self.fail('Valid input to should not raise "Invalid" exception') def test_invalid_input(self): with self.assertRaises(Invalid): self.p.validate('') with self.assertRaises(Invalid): self.p.validate(None) with self.assertRaises(Invalid): self.p.validate('a') with self.assertRaises(Invalid): self.p.validate(type) with self.assertRaises(Invalid): self.p.validate('0xff') def test_positive(self): self.p = IntegerValidator('positive', positive=True) try: self.p.validate(0) except Invalid: self.fail('0 is positive') try: self.p.validate('0') except Invalid: self.fail('0 is positive') try: self.p.validate(123) except Invalid: self.fail('123 is positive') with self.assertRaises(Invalid): self.p.validate(-1) with self.assertRaises(Invalid): self.p.validate('0xff') with self.assertRaises(Invalid): self.p.validate('-1') def test_max(self): self.p = IntegerValidator('max', max=128) try: self.p.validate(0) except Invalid: self.fail('0 is smaller than 128') try: self.p.validate('0') except Invalid: self.fail('0 is smaller than 128') try: self.p.validate(128) except Invalid: self.fail('128 is valid if max=128') with self.assertRaises(Invalid): self.p.validate(129) with self.assertRaises(Invalid): self.p.validate(100000) def test_default(self): self.p = IntegerValidator('name', default=1) self.assertEqual(self.p.default, 1)