def validate(self): self.policy_include = IpRangeHelper.parse_ip_ranges(self.data, 'include') self.policy_equal = IpRangeHelper.parse_ip_ranges(self.data, 'equal') has_include = self.policy_include is not None has_equal = self.policy_equal is not None if has_include and has_equal: raise FilterValidationError('Cannot have both include and equal.') if not has_include and not has_equal: raise FilterValidationError('Must have either include or equal.') return True
def process(self, resources, event=None): self.policy_include = IpRangeHelper.parse_ip_ranges( self.data, 'include') self.policy_equal = IpRangeHelper.parse_ip_ranges(self.data, 'equal') self.policy_any = IpRangeHelper.parse_ip_ranges(self.data, 'any') self.policy_only = IpRangeHelper.parse_ip_ranges(self.data, 'only') result, _ = ThreadHelper.execute_in_parallel( resources=resources, event=event, execution_method=self._check_resources, executor_factory=self.executor_factory, log=self.log) return result
def validate(self): try: IpRangeHelper.parse_ip_ranges(self.data, 'include') IpRangeHelper.parse_ip_ranges(self.data, 'equal') IpRangeHelper.parse_ip_ranges(self.data, 'any') IpRangeHelper.parse_ip_ranges(self.data, 'only') except AddrFormatError as e: raise PolicyValidationError("Invalid IP range found. %s" % e) return self
def test_parse_alias_invalid(self): data = { 'whatever': ['ServiceTags.ApiManagement.Invalid', '1.2.2.127', '1.2.2.128/25'] } actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = IPSet(['1.2.2.127/32', '1.2.2.128/25']) self.assertEqual(expected, actual)
def test_parse_multi_net_ensure_separation(self): ''' Verify that adjacent nets are not combined into one range ''' data = {'whatever': ['1.2.2.127/32', '1.2.2.128/25']} actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') unexpected = set([IPRange('1.2.2.127', '1.2.2.255')]) self.assertNotEqual(unexpected, actual)
def test_parse_alias_and_blocks(self): data = { 'whatever': ['ServiceTags.ApiManagement.WestUS', '1.2.2.127', '1.2.2.128/25'] } actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = IPSet([ '13.64.39.16/32', '40.112.242.148/31', '40.112.243.240/28', '1.2.2.127/32', '1.2.2.128/25' ]) self.assertEqual(expected, actual)
def test_parse_single_ip(self): data = {'whatever': ['1.2.2.127']} actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = IPSet(IPRange('1.2.2.127', '1.2.2.127')) self.assertEqual(expected, actual)
def test_parse_extra_dash(self): data = {'whatever': ['0.0.0.0-10.10.10.10-10.10.10.10']} with self.assertRaises(Exception) as context: IpRangeHelper.parse_ip_ranges(data, 'whatever') expected_error = 'Invalid range. Use x.x.x.x-y.y.y.y or x.x.x.x or x.x.x.x/y.' self.assertTrue(expected_error in str(context.exception))
def test_parse_spaces(self): data = {'whatever': ['0.0.0.0 - 10.10.10.10', '10.20.20.0 / 24']} actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = IPSet(IPRange('0.0.0.0', '10.10.10.10')) | \ IPSet(IPRange('10.20.20.0', '10.20.20.255')) self.assertEqual(expected, actual)
def test_parse_multi_net(self): data = {'whatever': ['1.2.2.127/32', '1.2.2.128/25']} actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = IPSet(IPRange('1.2.2.127', '1.2.2.127')) | \ IPSet(IPRange('1.2.2.128', '1.2.2.255')) self.assertEqual(expected, actual)
def test_absent(self): data = {'whatever': []} actual = IpRangeHelper.parse_ip_ranges(data, 'nosuch') self.assertIsNone(actual)
def test_empty(self): data = {'whatever': []} actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = IPSet() self.assertEqual(expected, actual)
def test_parse_range_and_net(self): data = {'whatever': ['0.0.0.0-10.10.10.10', '10.20.20.0/24']} actual = IpRangeHelper.parse_ip_ranges(data, 'whatever') expected = set([IPRange('0.0.0.0', '10.10.10.10'), IPRange('10.20.20.0', '10.20.20.255')]) self.assertEqual(expected, actual)