X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FSxp.py;h=4aaf3b094f86c25a85ec6356351daf94163d699a;hb=b2cd74063cbcdfadcbe20746116ec276e27ea0cb;hp=9f2f1a4dfbc60d88fe767d5c617869bc12b7689e;hpb=7f2d06e8938653190793dfb5355f6cbe81ab4cb7;p=integration%2Ftest.git
diff --git a/csit/libraries/Sxp.py b/csit/libraries/Sxp.py
index 9f2f1a4dfb..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):
@@ -441,7 +443,7 @@ def find_connection(connections_json, version, mode, ip, port, state):
"""
for connection in parse_connections(connections_json):
if (connection['peer-address'] == ip and connection['tcp-port'] == int(port) and (
- mode.strip() == 'any' or connection['mode'] == mode) and connection['version'] == version):
+ mode.strip() == 'any' or connection['mode'] == mode) and connection['version'] == version):
if state == 'none':
return True
elif connection['state'] == 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
@@ -898,7 +819,8 @@ def get_bindings_from_node_xml(ip, binding_range, domain_name):
return data
-def add_node_xml(node_id, port, password, version, node_ip=None, expansion=0, bindings_timeout=0, keystores=None):
+def add_node_xml(node_id, port, password, version, node_ip=None, expansion=0, bindings_timeout=0, keystores=None,
+ retry_open_timer=1):
"""Generate xml for Add Node request
:param node_id: Ipv4 address formatted node id
@@ -944,7 +866,7 @@ def add_node_xml(node_id, port, password, version, node_ip=None, expansion=0, bi
templ = Template('''
$id
- 1
+ $retry_open_timer
120
$timeout
90
@@ -962,11 +884,11 @@ 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,
- 'version': version, 'expansion': expansion, 'timeout': bindings_timeout, 'tls': tls})
+ 'version': version, 'expansion': expansion, 'timeout': bindings_timeout, 'tls': tls,
+ 'retry_open_timer': retry_open_timer})
return data
@@ -985,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
@@ -1013,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):
@@ -1030,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
@@ -1041,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
@@ -1068,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):
@@ -1096,3 +1131,148 @@ def prefix_range(start, end):
if index < end:
prefixes += ','
return prefixes
+
+
+def route_definition_xml(virtual_ip, net_mask, interface):
+ """Generate xml for Add Bindings request
+
+ :param interface: Network interface name
+ :type interface: str
+ :param net_mask: NetMask of virtual ip
+ :type net_mask: str
+ :param virtual_ip: Virtual ip
+ :type virtual_ip: str
+ :returns: String containing xml data for request
+
+ """
+ templ = Template('''
+
+ $vip
+ $interface
+ $mask
+
+ ''')
+ data = templ.substitute({'mask': net_mask, 'vip': virtual_ip, 'interface': interface})
+ return data
+
+
+def route_definitions_xml(routes, old_routes=None):
+ """Generate xml for Add Bindings request
+
+ :param routes: XML formatted data containing RouteDefinitions
+ :type routes: str
+ :param old_routes: Routes add to request that needs to persist
+ :type old_routes: str
+ :returns: String containing xml data for request
+
+ """
+ if old_routes and "" in old_routes:
+ templ = Template(old_routes.replace("", "$routes"))
+ else:
+ templ = Template('''
+ $routes
+
+ ''')
+ 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