SLA and Service Directory code added
[unfold.git] / sla / slaclient / templates / fed4fire / tests / testtemplates.py
1 # -*- coding: utf-8 -*-\r
2 \r
3 from unittest import TestCase\r
4 import datetime\r
5 \r
6 from slaclient import wsag_model\r
7 from slaclient import xmlconverter\r
8 import slaclient.templates.fed4fire\r
9 from slaclient.templates.fed4fire import TemplateInput\r
10 from slaclient.templates.fed4fire import AgreementInput\r
11 \r
12 \r
13 \r
14 \r
15 class TemplatesTestCase(TestCase):\r
16 \r
17     def setUp(self):\r
18         self.converter = xmlconverter.AgreementConverter()\r
19 \r
20         self.expirationtime = datetime.datetime.combine(\r
21             datetime.date.today(),\r
22             datetime.time(0, 0, 0)\r
23         )\r
24         self.templateinput = TemplateInput(\r
25             template_id="template-id",\r
26             template_name="template-name",\r
27             service_id="service-name",\r
28             expiration_time=self.expirationtime,\r
29             service_properties=[\r
30                 wsag_model.Agreement.Property(\r
31                     name="uptime",\r
32                     metric="xs:double",\r
33                     location="uptime"),\r
34                 wsag_model.Agreement.Property(\r
35                     name="responsetime",\r
36                     location="responsetime"),\r
37                 wsag_model.Agreement.Property(\r
38                     name="quality",\r
39                     metric="xs:string"),\r
40             ]\r
41         )\r
42         self.agreementinput = AgreementInput(\r
43             agreement_id="agreement-id",\r
44             agreement_name="agreement-name",\r
45             consumer="consumer-id",\r
46             provider="provider-id",\r
47             service_id="service-name",\r
48             template_id="template-id",\r
49             expiration_time=self.expirationtime,\r
50             service_properties=self.templateinput.service_properties,\r
51             guarantee_terms=[\r
52                 AgreementInput.GuaranteeTerm(\r
53                     "uptime", (0.9, 1)\r
54                 ),\r
55                 AgreementInput.GuaranteeTerm(\r
56                     "responsetime", (0, 200)\r
57                 )\r
58             ]\r
59         )\r
60 \r
61     def test_template(self):\r
62         slatemplate = slaclient.templates.fed4fire.render_slatemplate(\r
63             self.templateinput\r
64         )\r
65         # convert xml to wsag_model classes\r
66         actual = xmlconverter.convertstring(self.converter, slatemplate)\r
67         """:type: wsag_model.Template"""\r
68 \r
69         expected = self.templateinput\r
70 \r
71         self.assertEquals(\r
72             expected.template_id,\r
73             actual.template_id\r
74         )\r
75         self._check_common(expected, actual)\r
76         print slatemplate\r
77 \r
78     def test_agreement(self):\r
79         slaagreement = slaclient.templates.fed4fire.render_slaagreement(\r
80             self.agreementinput\r
81         )\r
82         # convert xml to wsag_model classes\r
83         actual = xmlconverter.convertstring(self.converter, slaagreement)\r
84         """:type: wsag_model.Agreement"""\r
85 \r
86         expected = self.agreementinput\r
87 \r
88         self.assertEquals(\r
89             expected.agreement_id,\r
90             actual.agreement_id\r
91         )\r
92         expected.consumer and self.assertEquals(\r
93             expected.consumer,\r
94             actual.context.consumer\r
95         )\r
96         self._check_common(expected, actual)\r
97         self._check_guarantee_terms(expected, actual)\r
98         print slaagreement\r
99 \r
100     def _check_common(self, expected, actual):\r
101         if expected.provider:\r
102             self.assertEquals(\r
103                 expected.provider,\r
104                 actual.context.provider\r
105             )\r
106         self.assertEquals(\r
107             expected.expiration_time_iso,\r
108             actual.context.expirationtime\r
109         )\r
110         self.assertEquals(\r
111             expected.service_id,\r
112             actual.context.service\r
113         )\r
114         self._check_properties(expected, actual)\r
115 \r
116     def _check_properties(self, expected, actual):\r
117         for expected_prop in expected.service_properties:\r
118             actual_prop = actual.variables[expected_prop.name]\r
119             self.assertEquals(\r
120                 expected_prop.name,\r
121                 actual_prop.name\r
122             )\r
123             self.assertEquals(\r
124                 expected_prop.location or expected_prop.name,\r
125                 actual_prop.location\r
126             )\r
127             self.assertEquals(\r
128                 expected_prop.metric or 'xs:double',\r
129                 actual_prop.metric\r
130             )\r
131 \r
132     def _check_guarantee_terms(self, expected, actual):\r
133         """\r
134         :type expected: AgreementInput\r
135         :type actual: wsag_model.Agreement\r
136         """\r
137         for expected_term in expected.guarantee_terms:\r
138             actual_term = actual.guaranteeterms[expected_term.name]\r
139 \r
140             if actual_term is None:\r
141                 self.assertEquals(expected_term.name, None)\r
142             self.assertEquals(\r
143                 expected_term.kpiname,\r
144                 actual_term.servicelevelobjective.kpiname\r
145             )\r
146             \r