--- /dev/null
+# -*- 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