+# -*- coding: utf-8 -*-\r
+\r
+from unittest import TestCase\r
+import datetime\r
+import json\r
+\r
+from slaclient.service.fed4fire import jsonparser\r
+\r
+\r
+class ParseJsonTestCase(TestCase):\r
+\r
+ def setUp(self):\r
+\r
+ self.from_json = None\r
+\r
+ self.expirationtime = datetime.datetime.combine(\r
+ datetime.date.today(),\r
+ datetime.time(0, 0, 0)\r
+ )\r
+\r
+ self.template = dict(\r
+ template_id="template-id",\r
+ template_name="template-name",\r
+ provider="provider-id",\r
+ service_id="service-id",\r
+ expiration_time=self.expirationtime.isoformat(),\r
+ service_properties=[\r
+ dict(servicename=None, name="uptime", metric=None,\r
+ location=None),\r
+ dict(servicename="service-name1", name="uptime", metric=None,\r
+ location=""),\r
+ dict(servicename="service-name2", name="metric1",\r
+ metric="xs:string", location=None),\r
+ dict(servicename="service-name2", name="metric2",\r
+ metric="xs:double", location="//monitoring/metric2")\r
+ ]\r
+ )\r
+\r
+ self.agreement = dict(\r
+ agreement_id="agreement-id",\r
+ template_id="template-id",\r
+ agreement_name="agreement-name",\r
+ consumer="consumer-id",\r
+ provider="provider-id",\r
+ service_id="service-id",\r
+ expiration_time=self.expirationtime.isoformat(),\r
+ guarantees=[\r
+ dict(name="sin", bounds=(-1, 1))\r
+ ]\r
+ )\r
+\r
+ def _check_dict(self, d, is_agreement):\r
+ o = self.from_json(json.dumps(d))\r
+ self.assertEquals(d.get("template_id", None), o.template_id)\r
+ if is_agreement:\r
+ self.assertEquals(d.get("agreement_id"), o.agreement_id or None)\r
+ self.assertEquals(d.get("agreement_name"), o.agreement_name)\r
+ self.assertEquals(d.get("consumer"), o.consumer or None)\r
+ else:\r
+ self.assertEquals(d.get("template_name"), o.template_name or None)\r
+ self.assertEquals(d.get("provider"), o.provider)\r
+ self.assertEquals(d.get("service_id"), o.service_id)\r
+ self.assertEquals(d.get("expiration_time"), o.expiration_time_iso)\r
+ if "service_properties" in d:\r
+ for i in range(0, len(d["service_properties"])):\r
+ self.assertEquals(\r
+ d["service_properties"][i].get("servicename"),\r
+ o.service_properties[i].servicename\r
+ )\r
+ self.assertEquals(\r
+ d["service_properties"][i].get("name"),\r
+ o.service_properties[i].name\r
+ )\r
+ self.assertEquals(\r
+ d["service_properties"][i].get("metric"),\r
+ o.service_properties[i].metric\r
+ )\r
+ self.assertEquals(\r
+ d["service_properties"][i].get("location"),\r
+ o.service_properties[i].location\r
+ )\r
+ if "guarantees" in d:\r
+ for i in range(0, len(d["guarantees"])):\r
+ self.assertEquals(\r
+ d["guarantees"][i].get("name"),\r
+ o.guarantee_terms[i].metric_name\r
+ )\r
+ self.assertEquals(\r
+ d["guarantees"][i].get("bounds"),\r
+ o.guarantee_terms[i].bounds\r
+ )\r
+\r
+ def test_template_from_json(self):\r
+ self.from_json = jsonparser.templateinput_from_json\r
+\r
+ #\r
+ # Add fields one by one, and check\r
+ #\r
+ d = dict()\r
+ for key in self.template:\r
+ if key == "service_properties":\r
+ d[key] = []\r
+ for prop in self.template[key]:\r
+ d[key].append(prop)\r
+ self._check_dict(d, False)\r
+ else:\r
+ d[key] = self.template[key]\r
+ self._check_dict(d, False)\r
+\r
+ def test_agreement_from_json(self):\r
+ self.from_json = jsonparser.agreementinput_from_json\r
+\r
+ #\r
+ # Add fields one by one, and check\r
+ #\r
+ d = dict()\r
+\r
+ for key in self.agreement:\r
+ if key == "guarantees":\r
+ d[key] = []\r
+ for term in self.agreement[key]:\r
+ d[key].append(term)\r
+ self._check_dict(d, True)\r
+ else:\r
+ d[key] = self.agreement[key]\r
+ self._check_dict(d, True)\r