def _check_add_rule_entry_params(self, add_dispatcher_message, rule_entry_data, rule_entry_index): attrs = add_dispatcher_message.get_attributes() dpt_name, rule_id, rule_entries = kznl.parse_rule_entry_attrs(attrs) self.assertEqual(rule_entry_data['rule_id'], rule_id) for k, v in rule_entry_data['entry_values'].items(): if rule_entry_data['entry_nums'][k] > rule_entry_index: self.assertEqual(k in rule_entries, True) if k in [ kznl.KZNL_ATTR_N_DIMENSION_SRC_IP, kznl.KZNL_ATTR_N_DIMENSION_DST_IP, kznl.KZNL_ATTR_N_DIMENSION_SRC_IP6, kznl.KZNL_ATTR_N_DIMENSION_DST_IP6 ]: (addr, mask) = rule_entries[k] self.assertEqual( testutil.addr_packed(rule_entry_data['entry_values'][k] [rule_entry_index]), addr) self.assertEqual( testutil.netmask_packed(rule_entry_data['entry_values'] [k][rule_entry_index]), mask) elif k == kznl.KZNL_ATTR_N_DIMENSION_SRC_PORT or k == kznl.KZNL_ATTR_N_DIMENSION_DST_PORT: self.assertEqual( rule_entry_data['entry_values'][k][rule_entry_index], rule_entries[k]) else: self.assertEqual( rule_entry_data['entry_values'][k][rule_entry_index], rule_entries[k])
def setup_service_dispatcher(self, services, dispatchers, add_zone = True, add_service = True): self._dumped_diszpancsers = [] self.start_transaction() if add_zone: self._addzones() if add_service: for service in services: if type(service) == types.DictType: service = service['name'] self.send_message(messages.KZorpAddProxyServiceMessage(service)) for dispatcher in dispatchers: message_add_dispatcher = messages.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) self.send_message(message_add_dispatcher, error_handler=lambda res: os.strerror(res)+" "+str(message_add_dispatcher)) for rule in dispatcher['rules']: _max = 0 for name, value in rule['entry_nums'].items(): if _max < value: _max = value message_add_rule = messages.KZorpAddRuleMessage(dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums'] ) self.send_message(message_add_rule) for i in range(_max): data = {} for dim_type in messages.N_DIMENSION_ATTRS: if dim_type in rule['entry_nums'] and rule['entry_nums'][dim_type] > i: if dim_type in [messages.KZNL_ATTR_N_DIMENSION_SRC_IP, messages.KZNL_ATTR_N_DIMENSION_DST_IP]: subnet = rule['entry_values'][dim_type][i] data[dim_type] = (testutil.addr_packed(subnet), testutil.netmask_packed(subnet)) elif dim_type in [messages.KZNL_ATTR_N_DIMENSION_SRC_IP6, messages.KZNL_ATTR_N_DIMENSION_DST_IP6]: subnet = rule['entry_values'][dim_type][i] data[dim_type] = (testutil.addr_packed6(subnet), testutil.netmask_packed6(subnet)) else: data[dim_type] = rule['entry_values'][dim_type][i] #print "rule=%s\ndispatcher=%s\ndata=%s\n"%(rule,dispatcher['name'],data) message_add_rule_entry = messages.KZorpAddRuleEntryMessage(dispatcher['name'], rule['rule_id'], data) self.send_message(message_add_rule_entry) self.end_transaction()
def setup_service_dispatcher(self, services, dispatchers, add_zone = True, add_service = True): self._dumped_diszpancsers = [] self.start_transaction() if add_zone: self._addzones() if add_service: for service in services: if type(service) == types.DictType: service = service['name'] self.send_message(kznl.KZorpAddProxyServiceMessage(service)) for dispatcher in dispatchers: message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) self.send_message(message_add_dispatcher, error_handler=lambda res: os.strerror(res)+" "+str(message_add_dispatcher)) for rule in dispatcher['rules']: _max = 0 for name, value in rule['entry_nums'].items(): if _max < value: _max = value message_add_rule = kznl.KZorpAddRuleMessage(dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums'] ) self.send_message(message_add_rule) for i in range(_max): data = {} for dim_type in kznl.N_DIMENSION_ATTRS: if dim_type in rule['entry_nums'] and rule['entry_nums'][dim_type] > i: if dim_type in [kznl.KZNL_ATTR_N_DIMENSION_SRC_IP, kznl.KZNL_ATTR_N_DIMENSION_DST_IP]: subnet = rule['entry_values'][dim_type][i] data[dim_type] = (testutil.addr_packed(subnet), testutil.netmask_packed(subnet)) elif dim_type in [kznl.KZNL_ATTR_N_DIMENSION_SRC_IP6, kznl.KZNL_ATTR_N_DIMENSION_DST_IP6]: subnet = rule['entry_values'][dim_type][i] data[dim_type] = (testutil.addr_packed6(subnet), testutil.netmask_packed6(subnet)) else: data[dim_type] = rule['entry_values'][dim_type][i] #print "rule=%s\ndispatcher=%s\ndata=%s\n"%(rule,dispatcher['name'],data) message_add_rule_entry = kznl.KZorpAddRuleEntryMessage(dispatcher['name'], rule['rule_id'], data) self.send_message(message_add_rule_entry) self.end_transaction()
def _check_add_rule_entry_params(self, add_dispatcher_message, rule_entry_data, rule_entry_index): attrs = add_dispatcher_message.get_attributes() dpt_name, rule_id, rule_entries = kznl.parse_rule_entry_attrs(attrs) self.assertEqual(rule_entry_data['rule_id'], rule_id) for k, v in rule_entry_data['entry_values'].items(): if rule_entry_data['entry_nums'][k] > rule_entry_index: self.assertEqual(k in rule_entries, True) if k in [kznl.KZNL_ATTR_N_DIMENSION_SRC_IP, kznl.KZNL_ATTR_N_DIMENSION_DST_IP, kznl.KZNL_ATTR_N_DIMENSION_SRC_IP6, kznl.KZNL_ATTR_N_DIMENSION_DST_IP6]: (addr, mask) = rule_entries[k] self.assertEqual(testutil.addr_packed(rule_entry_data['entry_values'][k][rule_entry_index]), addr) self.assertEqual(testutil.netmask_packed(rule_entry_data['entry_values'][k][rule_entry_index]), mask) elif k == kznl.KZNL_ATTR_N_DIMENSION_SRC_PORT or k == kznl.KZNL_ATTR_N_DIMENSION_DST_PORT: self.assertEqual(rule_entry_data['entry_values'][k][rule_entry_index], rule_entries[k]) else: self.assertEqual(rule_entry_data['entry_values'][k][rule_entry_index], rule_entries[k])
def test_n_dimension_errors(self): error_dup_dispatchers=[ { 'name' : 'n_dimension_error', 'num_rules' : 0, }, { 'name' : 'n_dimension_error2', 'num_rules' : 2, 'rules' : [{ 'rule_id' : 1, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_IFACE : 2}, 'errno' : 0 } ] } ] error_num_rules_dispatchers=[ { 'name' : 'n_dimension_error3', 'num_rules' : 1, 'rules' : [{ 'rule_id' : 2, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_IFACE : 2}, 'errno' : 0 }, { 'rule_id' : 3, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_IFACE : 2}, 'errno' : -errno.EINVAL } ] }, { 'name' : 'n_dimension_error4', 'num_rules' : 1, 'rules' : [{ 'rule_id' : 3, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_IFACE : 2}, #FIXME: this shouldbe: -errno.EEXIST 'errno' : 0 } ] } ] error_num_rule_entries=[ { 'name' : 'n_dimension_error5', 'num_rules' : 8, 'rules' : [{ 'rule_id' : 4, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_IFACE : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_IFACE : ['eth4', 'eth2'] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 5, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_PROTO : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_PROTO : [socket.IPPROTO_TCP, socket.IPPROTO_UDP] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 6, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_PORT : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_PORT : [(1,1), (2,2)] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 7, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_DST_PORT : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_DST_PORT : [(3,3),(4,5)] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 8, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_IP : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_IP : ['1.2.3.4', '2.3.4.5'] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 9, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_ZONE : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_ZONE : ['ZZZ', 'ZZ'] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 10, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_DST_IP : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_DST_IP : ['3.4.5.6', '4.5.6.7'] }, 'rule_entry_errnos' : [0, -errno.ENOMEM] }, { 'rule_id' : 11, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_DST_ZONE : 1}, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_DST_ZONE : ['AAA', 'AA']}, 'rule_entry_errnos' : [0, -errno.ENOMEM] } ] } ] error_zones_exist=[ { 'name' : 'n_dimension_error6', 'num_rules' : 2, 'rules' : [{ 'rule_id' : 12, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_ZONE : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_SRC_ZONE : 'BBB' }, 'rule_entry_errnos' : [-errno.ENOENT] }, { 'rule_id' : 13, 'service' : 'A_A', 'entry_nums' : { kznl.KZNL_ATTR_N_DIMENSION_DST_ZONE : 1 }, 'entry_values' : { kznl.KZNL_ATTR_N_DIMENSION_DST_ZONE : 'CCC' }, 'rule_entry_errnos' : [-errno.ENOENT] } ] } ] #Check add_dispatcher without starting a transaction dispatcher = error_dup_dispatchers[0] message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) res = self.send_message(message_add_dispatcher, assert_on_error = False) self.assertEqual(res, -errno.ENOENT) #check duplicated add_dispatcher self.start_transaction() message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) res = self.send_message(message_add_dispatcher, assert_on_error = False) self.assertEqual(res, 0) res = self.send_message(message_add_dispatcher, assert_on_error = False) self.assertEqual(res, -errno.EEXIST) self.end_transaction() #check if num_rules > number of rule_entries dispathcer = error_dup_dispatchers[1] self.start_transaction() message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) res = self.send_message(message_add_dispatcher, assert_on_error = False) self.assertEqual(res, 0) self.end_transaction() #check if num_rules < number of rule entries, check adding existing rule_id self.start_transaction() for i in range(len(error_num_rules_dispatchers)): dispatcher = error_num_rules_dispatchers[i] message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) res = self.send_message(message_add_dispatcher, assert_on_error = False) for rule in dispatcher['rules']: message_add_rule = kznl.KZorpAddRuleMessage(dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums'] ) res = self.send_message(message_add_rule, assert_on_error = False) if 'errno' in rule: self.assertEqual(res, rule['errno']) self.end_transaction() #check if entry_nums < number of entry_values self.start_transaction() for i in range(len(error_num_rule_entries)): dispatcher = error_num_rule_entries[i] message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) res = self.send_message(message_add_dispatcher, assert_on_error = False) for rule in dispatcher['rules']: _max = 2 message_add_rule = kznl.KZorpAddRuleMessage(dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums'] ) res = self.send_message(message_add_rule, assert_on_error = False) if 'errno' in rule: self.assertEqual(res, rule['errno']) for i in range(_max): data = {} for dim_type in kznl.N_DIMENSION_ATTRS: if dim_type in rule['entry_nums']: if dim_type in [kznl.KZNL_ATTR_N_DIMENSION_SRC_IP, kznl.KZNL_ATTR_N_DIMENSION_DST_IP, kznl.KZNL_ATTR_N_DIMENSION_SRC_IP6, kznl.KZNL_ATTR_N_DIMENSION_DST_IP6]: data[dim_type] = (testutil.addr_packed(rule['entry_values'][dim_type][i]), testutil.netmask_packed(rule['entry_values'][dim_type][i])) else: data[dim_type] = rule['entry_values'][dim_type][i] message_add_rule_entry = kznl.KZorpAddRuleEntryMessage(dispatcher['name'], rule['rule_id'], data) res = self.send_message(message_add_rule_entry, assert_on_error = False) self.assertEqual(res, rule['rule_entry_errnos'][i]) self.end_transaction() self.start_transaction() #check zones exist for i in range(len(error_zones_exist)): dispatcher = error_zones_exist[i] message_add_dispatcher = kznl.KZorpAddDispatcherMessage(dispatcher['name'], dispatcher['num_rules'] ) res = self.send_message(message_add_dispatcher, assert_on_error = False) for rule in dispatcher['rules']: _max = 1 message_add_rule = kznl.KZorpAddRuleMessage(dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums'] ) res = self.send_message(message_add_rule, assert_on_error = False) if 'errno' in rule: self.assertEqual(res, rule['errno']) for i in range(_max): data = {} for dim_type in kznl.N_DIMENSION_ATTRS: if dim_type in rule['entry_nums']: if dim_type == kznl.KZNL_ATTR_N_DIMENSION_SRC_IP or dim_type == kznl.KZNL_ATTR_N_DIMENSION_DST_IP: data[dim_type] = (struct.pack('I', rule['entry_values'][dim_type][i].ip), struct.pack('I', rule['entry_values'][dim_type][i].mask)) else: data[dim_type] = rule['entry_values'][dim_type][i] message_add_rule_entry = kznl.KZorpAddRuleEntryMessage(dispatcher['name'], rule['rule_id'], data) res = self.send_message(message_add_rule_entry, assert_on_error = False) self.assertEqual(res, rule['rule_entry_errnos'][i]) self.end_transaction()
def test_n_dimension_errors(self): error_dup_dispatchers = [{ 'name': 'n_dimension_error', 'num_rules': 0, }, { 'name': 'n_dimension_error2', 'num_rules': 2, 'rules': [{ 'rule_id': 1, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_IFACE: 2 }, 'errno': 0 }] }] error_num_rules_dispatchers = [ { 'name': 'n_dimension_error3', 'num_rules': 1, 'rules': [{ 'rule_id': 2, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_IFACE: 2 }, 'errno': 0 }, { 'rule_id': 3, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_IFACE: 2 }, 'errno': -errno.EINVAL }] }, { 'name': 'n_dimension_error4', 'num_rules': 1, 'rules': [{ 'rule_id': 3, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_IFACE: 2 }, #FIXME: this shouldbe: -errno.EEXIST 'errno': 0 }] } ] error_num_rule_entries = [{ 'name': 'n_dimension_error5', 'num_rules': 8, 'rules': [{ 'rule_id': 4, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_IFACE: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_IFACE: ['eth4', 'eth2'] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 5, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_PROTO: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_PROTO: [socket.IPPROTO_TCP, socket.IPPROTO_UDP] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 6, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_SRC_PORT: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_SRC_PORT: [(1, 1), (2, 2)] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 7, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_DST_PORT: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_DST_PORT: [(3, 3), (4, 5)] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 8, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_SRC_IP: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_SRC_IP: ['1.2.3.4', '2.3.4.5'] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 9, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_SRC_ZONE: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_SRC_ZONE: ['ZZZ', 'ZZ'] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 10, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_DST_IP: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_DST_IP: ['3.4.5.6', '4.5.6.7'] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }, { 'rule_id': 11, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_DST_ZONE: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_DST_ZONE: ['AAA', 'AA'] }, 'rule_entry_errnos': [0, -errno.ENOMEM] }] }] error_zones_exist = [{ 'name': 'n_dimension_error6', 'num_rules': 2, 'rules': [{ 'rule_id': 12, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_SRC_ZONE: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_SRC_ZONE: 'BBB' }, 'rule_entry_errnos': [-errno.ENOENT] }, { 'rule_id': 13, 'service': 'A_A', 'entry_nums': { messages.KZNL_ATTR_N_DIMENSION_DST_ZONE: 1 }, 'entry_values': { messages.KZNL_ATTR_N_DIMENSION_DST_ZONE: 'CCC' }, 'rule_entry_errnos': [-errno.ENOENT] }] }] #Check add_dispatcher without starting a transaction dispatcher = error_dup_dispatchers[0] message_add_dispatcher = messages.KZorpAddDispatcherMessage( dispatcher['name'], dispatcher['num_rules']) res = self.send_message(message_add_dispatcher, assert_on_error=False) self.assertEqual(res, -errno.ENOENT) #check duplicated add_dispatcher self.start_transaction() message_add_dispatcher = messages.KZorpAddDispatcherMessage( dispatcher['name'], dispatcher['num_rules']) res = self.send_message(message_add_dispatcher, assert_on_error=False) self.assertEqual(res, 0) res = self.send_message(message_add_dispatcher, assert_on_error=False) self.assertEqual(res, -errno.EEXIST) self.end_transaction() #check if num_rules > number of rule_entries dispathcer = error_dup_dispatchers[1] self.start_transaction() message_add_dispatcher = messages.KZorpAddDispatcherMessage( dispatcher['name'], dispatcher['num_rules']) res = self.send_message(message_add_dispatcher, assert_on_error=False) self.assertEqual(res, 0) self.end_transaction() #check if num_rules < number of rule entries, check adding existing rule_id self.start_transaction() for i in range(len(error_num_rules_dispatchers)): dispatcher = error_num_rules_dispatchers[i] message_add_dispatcher = messages.KZorpAddDispatcherMessage( dispatcher['name'], dispatcher['num_rules']) res = self.send_message(message_add_dispatcher, assert_on_error=False) for rule in dispatcher['rules']: message_add_rule = messages.KZorpAddRuleMessage( dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums']) res = self.send_message(message_add_rule, assert_on_error=False) if 'errno' in rule: self.assertEqual(res, rule['errno']) self.end_transaction() #check if entry_nums < number of entry_values self.start_transaction() for i in range(len(error_num_rule_entries)): dispatcher = error_num_rule_entries[i] message_add_dispatcher = messages.KZorpAddDispatcherMessage( dispatcher['name'], dispatcher['num_rules']) res = self.send_message(message_add_dispatcher, assert_on_error=False) for rule in dispatcher['rules']: _max = 2 message_add_rule = messages.KZorpAddRuleMessage( dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums']) res = self.send_message(message_add_rule, assert_on_error=False) if 'errno' in rule: self.assertEqual(res, rule['errno']) for i in range(_max): data = {} for dim_type in messages.N_DIMENSION_ATTRS: if dim_type in rule['entry_nums']: if dim_type in [ messages.KZNL_ATTR_N_DIMENSION_SRC_IP, messages.KZNL_ATTR_N_DIMENSION_DST_IP, messages.KZNL_ATTR_N_DIMENSION_SRC_IP6, messages.KZNL_ATTR_N_DIMENSION_DST_IP6 ]: data[dim_type] = ( testutil.addr_packed( rule['entry_values'][dim_type][i]), testutil.netmask_packed( rule['entry_values'][dim_type][i])) else: data[dim_type] = rule['entry_values'][ dim_type][i] message_add_rule_entry = messages.KZorpAddRuleEntryMessage( dispatcher['name'], rule['rule_id'], data) res = self.send_message(message_add_rule_entry, assert_on_error=False) self.assertEqual(res, rule['rule_entry_errnos'][i]) self.end_transaction() self.start_transaction() #check zones exist for i in range(len(error_zones_exist)): dispatcher = error_zones_exist[i] message_add_dispatcher = messages.KZorpAddDispatcherMessage( dispatcher['name'], dispatcher['num_rules']) res = self.send_message(message_add_dispatcher, assert_on_error=False) for rule in dispatcher['rules']: _max = 1 message_add_rule = messages.KZorpAddRuleMessage( dispatcher['name'], rule['rule_id'], rule['service'], rule['entry_nums']) res = self.send_message(message_add_rule, assert_on_error=False) if 'errno' in rule: self.assertEqual(res, rule['errno']) for i in range(_max): data = {} for dim_type in messages.N_DIMENSION_ATTRS: if dim_type in rule['entry_nums']: if dim_type == messages.KZNL_ATTR_N_DIMENSION_SRC_IP or dim_type == messages.KZNL_ATTR_N_DIMENSION_DST_IP: data[dim_type] = (struct.pack( 'I', rule['entry_values'][dim_type][i].ip), struct.pack( 'I', rule['entry_values'] [dim_type][i].mask)) else: data[dim_type] = rule['entry_values'][ dim_type][i] message_add_rule_entry = messages.KZorpAddRuleEntryMessage( dispatcher['name'], rule['rule_id'], data) res = self.send_message(message_add_rule_entry, assert_on_error=False) self.assertEqual(res, rule['rule_entry_errnos'][i]) self.end_transaction()