[ONOS-7876] Initial STC implementation for ODTN

Change-Id: I51a22348cc73c576c5d10551e84ca8ac2f2a2040
diff --git a/tools/test/scenarios/bin/tapiHelper.py b/tools/test/scenarios/bin/tapiHelper.py
new file mode 100755
index 0000000..74714d0
--- /dev/null
+++ b/tools/test/scenarios/bin/tapiHelper.py
@@ -0,0 +1,115 @@
+#!/usr/bin/python3
+
+import requests
+import json
+import itertools
+
+#
+# Creates connectivity json
+#
+def tapi_input(sip_uuids):
+    create_input = {
+              "tapi-connectivity:input": {
+                "end-point" : [
+                  {
+                    "local-id": sip_uuids[0],
+                    "service-interface-point": {
+                        "service-interface-point-uuid" : sip_uuids[0]
+                    }
+                  }
+                ,
+                  {
+                    "local-id": sip_uuids[1],
+                    "service-interface-point": {
+                        "service-interface-point-uuid" : sip_uuids[1]
+                    }
+                 }
+                ]
+              }
+            }
+    return create_input
+
+#
+# Obtains TAPI context through restconf
+#
+def get_context(url_context):
+    resp = requests.get(url_context, auth=('onos', 'rocks'))
+    if resp.status_code != 200:
+       raise Exception('GET {}'.format(resp.status_code))
+    return resp.json()
+
+#
+# Requests a connectivity service
+#
+def request_connection(url_connectivity, context):
+    # All Context SIPs
+    sips = context["tapi-common:context"]["service-interface-point"]
+
+    # Sorted Photonic Media SIPs. filter is an iterable
+    esips = list(filter(is_dsr_media, sorted(sips, key=lambda sip: sip["name"][0]["value"])))
+    endpoints = [esips[0], esips[-1]]
+    sip_uuids = []
+    for sip in endpoints:
+        sip_uuids.append(sip["uuid"])
+    for uuid in sip_uuids:
+        print(uuid)
+
+    create_input_json = json.dumps(tapi_input(sip_uuids))
+    print (create_input_json)
+    headers = {'Content-type': 'application/json'}
+    resp = requests.post(url_connectivity, data=create_input_json, headers=headers,  auth=('onos', 'rocks'))
+    if resp.status_code != 200:
+        raise Exception('POST {}'.format(resp.status_code))
+    return resp
+
+#
+# Filter method used to keep only SIPs that are photonic_media
+#
+def is_photonic_media(sip):
+    return sip["layer-protocol-name"]=="PHOTONIC_MEDIA"
+
+#
+# Filter method used to keep only SIPs that are DSR
+#
+def is_dsr_media(sip):
+    return sip["layer-protocol-name"]=="DSR"
+
+#
+# Processes the topology to verify the correctness
+#
+def process_topology():
+   # TODO use method to parse topology
+   # Getting the Topology
+   # topology = context["tapi-common:context"]["tapi-topology:topology-context"]["topology"][0]
+   # nodes = topology["node"];
+   # links = topology["link"];
+   noop
+
+#
+# Creates a connection first getting the context, parsing for SIPS and then issuing the request.
+#
+def create_connection(url_context, url_connectivity):
+    context = get_context(url_context)
+    return request_connection(url_connectivity, context)
+
+#
+# Obtains existing connectivity services
+#
+def get_connection(url_connectivity, uuid):
+    if(uuid == ""):
+        json = '{}'
+    else:
+        #TODO use uuid to retrieve given topo
+        print "Not Yet implemented"
+        json = '{}'
+    headers = {'Content-type': 'application/json'}
+    resp = requests.post(url_connectivity, data=json, headers=headers,  auth=('onos', 'rocks'))
+    if resp.status_code != 200:
+            raise Exception('POST {}'.format(resp.status_code))
+    return resp
+
+
+
+
+
+