X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FSxp.py;h=4aaf3b094f86c25a85ec6356351daf94163d699a;hb=d52be90c6c92151afb0ddeb49401f195b347011f;hp=5cd5a60726f4ecf28c6b5d3e698bc77542b7ae00;hpb=622e6ed29aab80a24b1b47117287eadef81fba9c;p=integration%2Ftest.git diff --git a/csit/libraries/Sxp.py b/csit/libraries/Sxp.py index 5cd5a60726..4aaf3b094f 100644 --- a/csit/libraries/Sxp.py +++ b/csit/libraries/Sxp.py @@ -414,11 +414,13 @@ def parse_connections(connections_json): """ data = json.loads(connections_json) - connections = data['output']['connections'] - output = [] - for connection in connections.values(): - output += connection - return output + output = data['output'] + result = [] + if output: + connections = output['connections'] + for connection in connections.values(): + result += connection + return result def find_connection(connections_json, version, mode, ip, port, state): @@ -531,30 +533,6 @@ def find_binding_legacy(prefix_groups_json, sgt, prefix, source_, action): return found -def add_entry_xml(sgt, prefix, ip, domain_name): - """Generate xml for Add Bindings request - - :param sgt: Source Group Tag - :type sgt: str - :param prefix: Ipv4/6 prefix - :type prefix: str - :param ip: Ipv4 address of node - :type ip: str - :param domain_name: Name of Domain - :type domain_name: str - :returns: String containing xml data for request - - """ - templ = Template(''' - $ip - $domain - $sgt - $prefix -''') - data = templ.substitute({'sgt': sgt, 'prefix': prefix, 'ip': ip, 'domain': get_domain_name(domain_name)}) - return data - - def add_connection_xml(version, mode, ip, port, node, password_, domain_name, bindings_timeout=0, security_mode=''): """Generate xml for Add Connection request @@ -596,6 +574,9 @@ def add_connection_xml(version, mode, ip, port, node, password_, domain_name, bi 30 $timeout $timeout + 90 + 180 + 90 @@ -632,66 +613,6 @@ def delete_connections_xml(address, port, node, domain_name): return data -def update_binding_xml(sgt0, prefix0, sgt1, prefix1, ip, domain_name): - """Generate xml for Update Binding request - - :param sgt0: Original Source Group Tag - :type sgt0: str - :param prefix0: Original Ipv4/6 prefix - :type prefix0: str - :param sgt1: New Source Group Tag - :type sgt1: str - :param prefix1: New Ipv4/6 prefix - :type prefix1: str - :param ip: Ipv4 address of node - :type ip: str - :param domain_name: Name of Domain - :type domain_name: str - :returns: String containing xml data for request - - """ - templ = Template(''' - $ip - $domain - - $sgt0 - $prefix0 - - - $sgt1 - $prefix1 - -''') - data = templ.substitute( - {'sgt0': sgt0, 'sgt1': sgt1, 'prefix0': prefix0, 'prefix1': prefix1, 'ip': ip, - 'domain': get_domain_name(domain_name)}) - return data - - -def delete_binding_xml(sgt, prefix, ip, domain_name): - """Generate xml for Delete Binding request - - :param sgt: Source Group Tag - :type sgt: str - :param prefix: Ipv4/6 prefix - :type prefix: str - :param ip: Ipv4 address of node - :type ip: str - :param domain_name: Name of Domain - :type domain_name: str - :returns: String containing xml data for request - - """ - templ = Template(''' - $ip - $sgt - $prefix - $domain -''') - data = templ.substitute({'sgt': sgt, 'prefix': prefix, 'ip': ip, 'domain': get_domain_name(domain_name)}) - return data - - def add_peer_group_xml(name, peers, ip): """Generate xml for Add PeerGroups request @@ -963,7 +884,6 @@ def add_node_xml(node_id, port, password, version, node_ip=None, expansion=0, bi $version ODL SXP Controller $ip - ''') data = templ.substitute( {'ip': node_ip or node_id, 'id': node_id, 'port': port, 'password': password, @@ -987,21 +907,82 @@ def delete_node_xml(node_id): return data -def add_domain_xml(node_id, name): - """Generate xml for Add Domain request +def add_domain_xml_fluorine(node_id, name, sgt, prefixes, origin): + """Generate xml for Add Domain request (Fluorine version: bindings with origin) :param node_id: Id of node :type node_id: str :param name: Name of Domain :type name: str + :param sgt: Security group + :type sgt: int + :param prefixes: List of ip-prefixes + :type prefixes: str + :param origin: Origin of added bindings + :type origin: str :returns: String containing xml data for request """ - templ = Template(''' - $id - $name + master_database = '' + if prefixes != 'None': + xml_prefixes = '' + for prefix in prefixes.split(','): + xml_prefixes += '\n' + '' + prefix + '' + if xml_prefixes: + master_database += ''' + + $sgt + $xml_prefixes + + ''' + master_database = Template(master_database).substitute(({'sgt': sgt, 'xml_prefixes': xml_prefixes})) + + templ = Template(''' + $id + $name + $origin + $master_database ''') - data = templ.substitute({'name': name, 'id': node_id}) + + data = templ.substitute({'name': name, 'id': node_id, 'origin': origin, 'master_database': master_database}) + return data + + +def add_domain_xml_oxygen(node_id, name, sgt, prefixes): + """Generate xml for Add Domain request (Oxygen version: bindings without origin) + + :param node_id: Id of node + :type node_id: str + :param name: Name of Domain + :type name: str + :param sgt: Security group + :type sgt: int + :param prefixes: List of ip-prefixes + :type prefixes: str + :returns: String containing xml data for request + + """ + master_database = '' + if prefixes != 'None': + xml_prefixes = '' + for prefix in prefixes.split(','): + xml_prefixes += '\n' + '' + prefix + '' + if xml_prefixes: + master_database += ''' + + $sgt + $xml_prefixes + + ''' + master_database = Template(master_database).substitute(({'sgt': sgt, 'xml_prefixes': xml_prefixes})) + + templ = Template(''' + $id + $name + $master_database +''') + + data = templ.substitute({'name': name, 'id': node_id, 'master_database': master_database}) return data @@ -1015,7 +996,13 @@ def delete_domain_xml(node_id, name): :returns: String containing xml data for request """ - return add_domain_xml(node_id, name) + templ = Template(''' + $node_id + $name +''') + + data = templ.substitute({'node_id': node_id, 'name': name}) + return data def get_domain_name(domain_name): @@ -1032,8 +1019,8 @@ def get_domain_name(domain_name): return '' + domain_name + '' -def add_bindings_xml(node_id, domain, sgt, prefixes): - """Generate xml for Add Bindings request +def add_bindings_xml_fluorine(node_id, domain, sgt, prefixes, origin): + """Generate xml for Add Bindings request (Fluorine version with origin type) :param node_id: Id of node :type node_id: str @@ -1043,21 +1030,55 @@ def add_bindings_xml(node_id, domain, sgt, prefixes): :type sgt: int :param prefixes: List of ip-prefixes :type prefixes: str + :param origin: Origin of added bindings + :type origin: str :returns: String containing xml data for request """ - bindings = '' + xml_prefixes = '' for prefix in prefixes.split(','): - bindings += '\n' + '' + prefix + '' - templ = Template(''' - $id - $name - - $sgt - $bindings - + xml_prefixes += '\n' + '' + prefix + '' + templ = Template(''' + $id + $name + $origin + + + $sgt + $xml_prefixes + + ''') - data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'bindings': bindings}) + data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'xml_prefixes': xml_prefixes, 'origin': origin}) + return data + + +def add_bindings_xml_oxygen(node_id, domain, sgt, prefixes): + """Generate xml for Add Bindings request (Oxygen version without origin type) + + :param node_id: Id of node + :type node_id: str + :param domain: Name of Domain + :type domain: str + :param sgt: Security group + :type sgt: int + :param prefixes: List of ip-prefixes + :type prefixes: str + :returns: String containing xml data for request + + """ + xml_prefixes = '' + for prefix in prefixes.split(','): + xml_prefixes += '\n' + '' + prefix + '' + templ = Template(''' + $id + $name + + $sgt + $xml_prefixes + +''') + data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'xml_prefixes': xml_prefixes}) return data @@ -1070,12 +1091,24 @@ def delete_bindings_xml(node_id, domain, sgt, prefixes): :type domain: str :param sgt: Security group :type sgt: int - :param prefixes: List of ip-prefixes + :param prefixes: Comma separated list of ip-prefixes :type prefixes: str :returns: String containing xml data for request """ - return add_bindings_xml(node_id, domain, sgt, prefixes) + xml_prefixes = '' + for prefix in prefixes.split(','): + xml_prefixes += '\n' + '' + prefix + '' + templ = Template(''' + $id + $name + + $sgt + $xml_prefixes + +''') + data = templ.substitute({'name': domain, 'id': node_id, 'sgt': sgt, 'xml_prefixes': xml_prefixes}) + return data def prefix_range(start, end): @@ -1142,3 +1175,104 @@ def route_definitions_xml(routes, old_routes=None): ''') data = templ.substitute({'routes': routes}) return data + + +def add_binding_origin_xml(origin, priority): + """Generate xml for Add Binding Origin request + + :param origin: Origin type + :type origin: str + :param priority: Origin priority + :type priority: str + :returns: String containing xml data for request + + """ + templ = Template(''' + $origin + $priority +''') + data = templ.substitute({'origin': origin, 'priority': priority}) + return data + + +def update_binding_origin_xml(origin, priority): + """Generate xml for Update Binding Origin request + + :param origin: Origin type + :type origin: str + :param priority: Origin priority + :type priority: str + :returns: String containing xml data for request + + """ + templ = Template(''' + $origin + $priority +''') + data = templ.substitute({'origin': origin, 'priority': priority}) + return data + + +def delete_binding_origin_xml(origin): + """Generate xml for Delete Binding Origin request + + :param origin: Origin type + :type origin: str + :returns: String containing xml data for request + + """ + templ = Template(''' + $origin +''') + data = templ.substitute({'origin': origin}) + return data + + +def find_binding_origin(origins_json, origin): + """Test if Binding origin of specified value is contained in JSON + + :param origins_json: JSON containing Binding origins + :type origins_json: str + :param origin: Origin to be found + :type origin: str + :returns: True if Binding origin of specified origin type was found, otherwise False. + + """ + for json_origin in parse_binding_origins(origins_json): + if json_origin['origin'] == origin: + return True + return False + + +def find_binding_origin_with_priority(origins_json, origin, priority): + """Test if Binding origin of specified value and priority is contained in JSON + + :param origins_json: JSON containing Binding origins + :type origins_json: str + :param origin: Origin to be found + :type origin: str + :param priority: desired priority of origin + :type priority: str + :returns: True if Binding origin of specified origin type with desired priority was found, otherwise False. + + """ + for json_origin in parse_binding_origins(origins_json): + if json_origin['origin'] == origin: + if json_origin['priority'] == int(priority): + return True + return False + + +def parse_binding_origins(origins_json): + """Parse JSON string into Array of Binding origins + + :param origins_json: JSON containing Binding origins + :type origins_json: str + :returns: Array containing Binding origins. + + """ + output = [] + for origins in origins_json['binding-origins'].values(): + for origin in origins: + output.append(origin) + return output