Add CSIT for son-handler

Issue-ID: DCAEGEN2-1433
Signed-off-by: Niranjana <niranjana.y60@wipro.com>
Change-Id: Id7ea296ebef70964f5e8b751969595320b49d00a
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/Dockerfile b/scripts/dcaegen2-services-son-handler/sonhandler/Dockerfile
new file mode 100644
index 0000000..688a2fe
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/Dockerfile
@@ -0,0 +1,15 @@
+FROM python:alpine3.7
+
+ADD configdb-oof-sim.py /
+
+ADD ./sim-data /
+
+RUN pip install Flask
+
+RUN pip install requests
+
+EXPOSE 5000
+
+CMD ["flask", "run", "--host", "0.0.0.0"]
+
+CMD [ "python", "./configdb-oof-sim.py" ]
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/configdb-oof-sim.py b/scripts/dcaegen2-services-son-handler/sonhandler/configdb-oof-sim.py
new file mode 100644
index 0000000..7a51c95
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/configdb-oof-sim.py
@@ -0,0 +1,98 @@
+import flask
+import json
+from flask import request
+import requests
+import threading
+import time
+
+app = flask.Flask(__name__)
+app.config["DEBUG"] = True
+
+
+def get_neighbour_cell_list_for_cell_id():
+    with open('cell_list.json') as cell_list:
+        data = json.load(cell_list)
+    if not data:
+        return {"Error": "Unable to read file"}, 503
+    return data, None
+
+def get_pci_for_cell_id():
+    with open('pci_value.json') as pci_value:
+        data = json.load(pci_value)
+    if not data:
+        return {"Error": "Unable to read file"}, 503
+    return data, None
+
+def get_cell_data_for_cell_id():
+    with open('cell_data.json') as cell_data:
+        data = json.load(cell_data)
+    if not data:
+        return {"Error": "Unable to read file"}, 503
+    return data, None
+
+def get_oof_sync_response():
+    with open('oof_syn_response.json') as syncRes:
+        data = json.load(syncRes)
+    if not data:
+        return {"Error": "Unale to read file"}, 503
+    return data, None
+
+def get_oof_async_response(callback_url, transaction_id):
+    time.sleep(10)
+    with open('oof_async_response.json') as asyncRes:
+        data = json.load(asyncRes)
+        data['transactionId'] = transaction_id
+    if not data:
+        return {"Error": "Unable to read file"}, 503
+    res = requests.post(callback_url, json=data)
+    print('response from server:',res.text)
+    return res
+
+@app.route("/api/sdnc-config-db/v3/getNbrList/<cell_id>/<ts>", methods=["GET"])
+def get_neighbour_list(cell_id, ts):
+    data, status = get_neighbour_cell_list_for_cell_id()
+    if not status:
+        return data
+    return data, 503
+
+@app.route("/api/sdnc-config-db/v3/getPCI/<cell_id>/<ts>", methods=["GET"])
+def get_pci(cell_id, ts):
+    data, status = get_pci_for_cell_id()
+    if not status:
+        return data
+    return data, 503
+@app.route("/api/sdnc-config-db/v3/getPnfId/<cell_id>/<ts>", methods=["GET"])
+def get_pnf_id(cell_id, ts):
+    data, status = get_pci_for_cell_id()
+    data['value'] = 'ncserver5'
+    if not status:
+        return data
+    return data, 503
+
+@app.route("/api/sdnc-config-db/v3/getCell/<cell_id>", methods=["GET"])
+def get_cell_data(cell_id):
+    data, status = get_cell_data_for_cell_id()
+    if not status:
+        return data
+    return data, 503
+
+@app.route("/api/oof/v1/pci",methods=["POST"])
+def oof_optimizatio_result():
+    content = request.get_json()
+    callback_url = content['requestInfo']['callbackUrl']
+    transaction_id = content['requestInfo']['transactionId']
+    try:
+        task = threading.Thread(target=get_oof_async_response, args=(callback_url,transaction_id,))
+        task.daemon = True
+        task.start()
+    except:
+        print("Error: Unable to start thread")
+
+    data, status = get_oof_sync_response()
+
+    if not status:
+        return data, 202
+    return data, 503
+
+
+app.run(host='0.0.0.0')
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/cell_data.json b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/cell_data.json
new file mode 100644
index 0000000..0e4e73f
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/cell_data.json
@@ -0,0 +1,13 @@
+{
+	"neighbor": ["Chn0066", "Chn0067", "Chn0068", "Chn0069", "Chn0070", "Chn0072", "Chn0073", "Chn0074", "Chn0075", "Chn0076", "Chn0077", "Chn0078", "Chn0079", "Chn0080"],
+	"Cell": {
+		"networkId": "ran-1",
+		"nodeId": "Chn0071",
+		"physicalCellId": 1,
+		"pnfId": "ncserver5",
+		"sectorNumber": null,
+		"latitude": "27.55626304907802",
+		"longitude": "-58.48690415723466",
+		"notes": "NA"
+	}
+}
\ No newline at end of file
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/cell_list.json b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/cell_list.json
new file mode 100644
index 0000000..4f961ae
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/cell_list.json
@@ -0,0 +1,60 @@
+{
+	"cellId": "Chn0071",
+	"nbrList": [{
+		"targetCellId": "Chn0066",
+		"pciValue": 0,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0067",
+		"pciValue": 1,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0068",
+		"pciValue": 2,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0069",
+		"pciValue": 3,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0070",
+		"pciValue": 4,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0072",
+		"pciValue": 6,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0073",
+		"pciValue": 7,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0074",
+		"pciValue": 8,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0075",
+		"pciValue": 9,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0076",
+		"pciValue": 10,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0077",
+		"pciValue": 11,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0078",
+		"pciValue": 12,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0079",
+		"pciValue": 13,
+		"ho": true
+	}, {
+		"targetCellId": "Chn0080",
+		"pciValue": 14,
+		"ho": true
+	}]
+}
\ No newline at end of file
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/oof_async_response.json b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/oof_async_response.json
new file mode 100644
index 0000000..99f54cb
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/oof_async_response.json
@@ -0,0 +1,14 @@
+{
+	"transactionId": "fff33db3-8fc9-4e29-89ff-7419c85900bd",
+	"requestId": "742b9e6a-aa55-487e-9d71-a4a5e05b3981",
+	"requestStatus": "completed",
+	"statusMessage": "success",
+	"solutions": {
+		"networkId": "ran-1",
+		"pciSolutions": [{
+			"cellId": "Chn0071",
+			"pci": "5"
+		}],
+		"anrSolutions": []
+	}
+}
\ No newline at end of file
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/oof_syn_response.json b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/oof_syn_response.json
new file mode 100644
index 0000000..c9260bb
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/oof_syn_response.json
@@ -0,0 +1,6 @@
+{
+   "requestId": "742b9e6a-aa55-487e-9d71-a4a5e05b3981",
+   "transactionId": "fff33db3-8fc9-4e29-89ff-7419c85900bd",
+   "requestStatus": "accepted",
+   "statusMessage": ""
+}
\ No newline at end of file
diff --git a/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/pci_value.json b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/pci_value.json
new file mode 100644
index 0000000..6b6d447
--- /dev/null
+++ b/scripts/dcaegen2-services-son-handler/sonhandler/sim-data/pci_value.json
@@ -0,0 +1,4 @@
+{
+	"attributeName": "PCIvalue",
+	"value": "5"
+}
\ No newline at end of file