SLA and Service Directory code added
[myslice.git] / sla / slaclient / templates / fed4fire / tests / testtemplates.py
diff --git a/sla/slaclient/templates/fed4fire/tests/testtemplates.py b/sla/slaclient/templates/fed4fire/tests/testtemplates.py
new file mode 100755 (executable)
index 0000000..64d0fc8
--- /dev/null
@@ -0,0 +1,146 @@
+# -*- coding: utf-8 -*-\r
+\r
+from unittest import TestCase\r
+import datetime\r
+\r
+from slaclient import wsag_model\r
+from slaclient import xmlconverter\r
+import slaclient.templates.fed4fire\r
+from slaclient.templates.fed4fire import TemplateInput\r
+from slaclient.templates.fed4fire import AgreementInput\r
+\r
+\r
+\r
+\r
+class TemplatesTestCase(TestCase):\r
+\r
+    def setUp(self):\r
+        self.converter = xmlconverter.AgreementConverter()\r
+\r
+        self.expirationtime = datetime.datetime.combine(\r
+            datetime.date.today(),\r
+            datetime.time(0, 0, 0)\r
+        )\r
+        self.templateinput = TemplateInput(\r
+            template_id="template-id",\r
+            template_name="template-name",\r
+            service_id="service-name",\r
+            expiration_time=self.expirationtime,\r
+            service_properties=[\r
+                wsag_model.Agreement.Property(\r
+                    name="uptime",\r
+                    metric="xs:double",\r
+                    location="uptime"),\r
+                wsag_model.Agreement.Property(\r
+                    name="responsetime",\r
+                    location="responsetime"),\r
+                wsag_model.Agreement.Property(\r
+                    name="quality",\r
+                    metric="xs:string"),\r
+            ]\r
+        )\r
+        self.agreementinput = AgreementInput(\r
+            agreement_id="agreement-id",\r
+            agreement_name="agreement-name",\r
+            consumer="consumer-id",\r
+            provider="provider-id",\r
+            service_id="service-name",\r
+            template_id="template-id",\r
+            expiration_time=self.expirationtime,\r
+            service_properties=self.templateinput.service_properties,\r
+            guarantee_terms=[\r
+                AgreementInput.GuaranteeTerm(\r
+                    "uptime", (0.9, 1)\r
+                ),\r
+                AgreementInput.GuaranteeTerm(\r
+                    "responsetime", (0, 200)\r
+                )\r
+            ]\r
+        )\r
+\r
+    def test_template(self):\r
+        slatemplate = slaclient.templates.fed4fire.render_slatemplate(\r
+            self.templateinput\r
+        )\r
+        # convert xml to wsag_model classes\r
+        actual = xmlconverter.convertstring(self.converter, slatemplate)\r
+        """:type: wsag_model.Template"""\r
+\r
+        expected = self.templateinput\r
+\r
+        self.assertEquals(\r
+            expected.template_id,\r
+            actual.template_id\r
+        )\r
+        self._check_common(expected, actual)\r
+        print slatemplate\r
+\r
+    def test_agreement(self):\r
+        slaagreement = slaclient.templates.fed4fire.render_slaagreement(\r
+            self.agreementinput\r
+        )\r
+        # convert xml to wsag_model classes\r
+        actual = xmlconverter.convertstring(self.converter, slaagreement)\r
+        """:type: wsag_model.Agreement"""\r
+\r
+        expected = self.agreementinput\r
+\r
+        self.assertEquals(\r
+            expected.agreement_id,\r
+            actual.agreement_id\r
+        )\r
+        expected.consumer and self.assertEquals(\r
+            expected.consumer,\r
+            actual.context.consumer\r
+        )\r
+        self._check_common(expected, actual)\r
+        self._check_guarantee_terms(expected, actual)\r
+        print slaagreement\r
+\r
+    def _check_common(self, expected, actual):\r
+        if expected.provider:\r
+            self.assertEquals(\r
+                expected.provider,\r
+                actual.context.provider\r
+            )\r
+        self.assertEquals(\r
+            expected.expiration_time_iso,\r
+            actual.context.expirationtime\r
+        )\r
+        self.assertEquals(\r
+            expected.service_id,\r
+            actual.context.service\r
+        )\r
+        self._check_properties(expected, actual)\r
+\r
+    def _check_properties(self, expected, actual):\r
+        for expected_prop in expected.service_properties:\r
+            actual_prop = actual.variables[expected_prop.name]\r
+            self.assertEquals(\r
+                expected_prop.name,\r
+                actual_prop.name\r
+            )\r
+            self.assertEquals(\r
+                expected_prop.location or expected_prop.name,\r
+                actual_prop.location\r
+            )\r
+            self.assertEquals(\r
+                expected_prop.metric or 'xs:double',\r
+                actual_prop.metric\r
+            )\r
+\r
+    def _check_guarantee_terms(self, expected, actual):\r
+        """\r
+        :type expected: AgreementInput\r
+        :type actual: wsag_model.Agreement\r
+        """\r
+        for expected_term in expected.guarantee_terms:\r
+            actual_term = actual.guaranteeterms[expected_term.name]\r
+\r
+            if actual_term is None:\r
+                self.assertEquals(expected_term.name, None)\r
+            self.assertEquals(\r
+                expected_term.kpiname,\r
+                actual_term.servicelevelobjective.kpiname\r
+            )\r
+            \r