Coverage for tests/routers/test_properties_router.py: 98%
165 statements
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-25 05:47 +0000
« prev ^ index » next coverage.py v7.9.1, created at 2025-06-25 05:47 +0000
1import json
2import pytest
3from zenossapi.apiclient import ZenossAPIClientError
4from zenossapi.routers.properties import PropertiesRouter, ZenossProperty, ZenossCustomProperty
5import properties_resp
7pytest_plugins = "pytest-responses"
8url = 'https://zenoss/zport/dmd'
9headers = dict(
10 ContentType='application/json'
11)
12resp_body_template = dict(
13 result=dict(
14 success=True,
15 data=[],
16 )
17)
20def request_callback(request):
21 rdata = json.loads(request.body)
22 resp_headers = dict(ContentType='application/json')
24 def getZenProperties(rdata):
25 if rdata['params']:
26 if 'id' in rdata['params']:
27 if 'islocal' in rdata['params']:
28 return properties_resp.get_local_prop
29 else:
30 return properties_resp.get_prop
31 elif 'islocal' in rdata['params']:
32 return properties_resp.local_props
34 return properties_resp.props
36 def getCustomProperties(rdata):
37 if rdata['params'] and 'id' in rdata['params']:
38 if 'islocal' in rdata['params']:
39 return properties_resp.custom_local_props
41 return properties_resp.custom_props
43 def setZenProperty(rdata):
44 if rdata['zProperty'] == "zWinTrustedRealm":
45 return properties_resp.set_prop
46 elif rdata['zProperty'] == "cDateTest":
47 return properties_resp.set_custom_prop
49 def deleteZenProperty(rdata):
50 return properties_resp.delete_prop
52 def update(rdata):
53 return {
54 "uuid": "ba2f41f8-3c48-40a6-ab45-3c5e84252c3c",
55 "action": "PropertiesRouter",
56 "result": {
57 "success": True
58 },
59 "tid": 1,
60 "type": "rpc",
61 "method": "update"
62 }
64 method = locals()[rdata['method']]
65 resp_body = method(rdata['data'][0])
67 return (200, resp_headers, json.dumps(resp_body))
70def responses_callback(responses):
71 responses.add_callback(
72 responses.POST,
73 '{0}/properties_router'.format(url),
74 callback=request_callback,
75 content_type='application/json',
76 )
79class TestPropertiesRouter(object):
81 def test_properties_router_init(self):
82 pr = PropertiesRouter(url, headers, True)
83 assert pr.id is None
85 def test_properties_router_list_properties(self, responses):
86 responses_callback(responses)
88 pr = PropertiesRouter(url, headers, True)
89 props = pr.list_properties('test.example.com')
90 assert props['total'] == 4
91 assert len(props['properties']) == 4
92 assert props['properties'][0]['id'] == "zAggregatorCollectionInterval"
94 def test_properties_router_get_properties(self, responses):
95 responses_callback(responses)
97 pr = PropertiesRouter(url, headers, True)
98 props = pr.get_properties('test.example.com')
99 assert props['total'] == 4
100 assert len(props['properties']) == 4
101 assert isinstance(props['properties'][0], ZenossProperty)
102 assert props['properties'][0].id == "zAggregatorCollectionInterval"
104 def test_properties_router_list_local_properties(self, responses):
105 responses_callback(responses)
107 pr = PropertiesRouter(url, headers, True)
108 props = pr.list_local_properties('test.example.com')
109 assert props['total'] == 2
110 assert len(props['properties']) == 2
111 assert props['properties'][0]['id'] == "zMySQLConnectionString"
113 def test_properties_router_get_local_properties(self, responses):
114 responses_callback(responses)
116 pr = PropertiesRouter(url, headers, True)
117 props = pr.get_local_properties('test.example.com')
118 assert props['total'] == 2
119 assert len(props['properties']) == 2
120 assert isinstance(props['properties'][0], ZenossProperty)
121 assert props['properties'][0].id == "zMySQLConnectionString"
123 def test_properties_router_get_property(self, responses):
124 responses_callback(responses)
126 pr = PropertiesRouter(url, headers, True)
127 prop = pr.get_property('test.example.com', 'zWinTrustedRealm')
128 assert isinstance(prop, ZenossProperty)
129 assert prop.id == 'zWinTrustedRealm'
131 def test_properties_router_list_custom_properties(self, responses):
132 responses_callback(responses)
134 pr = PropertiesRouter(url, headers, True)
135 props = pr.list_custom_properties('test.example.com')
136 assert props['total'] == 1
137 assert len(props['properties']) == 1
138 assert props['properties'][0]['id'] == "cDateTest"
139 assert props['properties'][0]['path'] == "/"
141 def test_properties_router_get_custom_properties(self, responses):
142 responses_callback(responses)
144 pr = PropertiesRouter(url, headers, True)
145 props = pr.get_custom_properties('test.example.com')
146 assert props['total'] == 1
147 assert len(props['properties']) == 1
148 assert isinstance(props['properties'][0], ZenossCustomProperty)
149 assert props['properties'][0].id == "cDateTest"
151 def test_properties_router_get_custom_property(self, responses):
152 responses_callback(responses)
154 pr = PropertiesRouter(url, headers, True)
155 prop = pr.get_custom_property('test.example.com', 'cDateTest')
156 assert isinstance(prop, ZenossCustomProperty)
157 assert prop.id == "cDateTest"
158 assert prop.path == "Devices/"
160 def test_properties_router_set_property_value(self, responses):
161 responses_callback(responses)
163 pr = PropertiesRouter(url, headers, True)
164 prop = pr.set_property_value('test.example.com', 'zWinTrustedRealm', value='Westeros')
165 assert prop is True
167 def test_properties_router_zenossproperty_set_value(self, responses):
168 responses_callback(responses)
170 pr = PropertiesRouter(url, headers, True)
171 prop = pr.get_property('test.example.com', 'zWinTrustedRealm')
172 assert prop.id == "zWinTrustedRealm"
173 assert prop.path == "Devices/"
174 assert prop.set_value(path='Devices/Server/TEST/devices/test.example.com', value='Westeros')
175 assert prop.value == "Westeros"
176 assert prop.path == "Devices/Server/TEST/devices/test.example.com"
178 def test_properties_router_zenossproperty_delete(self, responses):
179 responses_callback(responses)
181 pr = PropertiesRouter(url, headers, True)
182 props = pr.get_properties('test.example.com', params=dict(id='zWinTrustedRealm', islocal=1))
183 prop = props['properties'][0]
184 assert prop.islocal == 1
185 assert prop.value == "Westeros"
186 assert prop.path == "Devices/Server/TEST/devices/test.example.com"
187 assert prop.delete()
188 assert prop.islocal == 0
189 assert prop.id == "zWinTrustedRealm"
190 assert prop.path == "/"
192 def test_properties_router_zenossproperty_delete_non_local(self, responses):
193 responses_callback(responses)
195 pr = PropertiesRouter(url, headers, True)
196 prop = pr.get_property('test.example.com', 'zWinTrustedRealm')
197 assert prop.islocal == 0
198 assert not prop.delete()
200 def test_properties_router_zenosscustomproperty_set_value(self, responses):
201 responses_callback(responses)
203 pr = PropertiesRouter(url, headers, True)
204 props = pr.get_custom_properties('test.example.com')
205 prop = props['properties'][0]
206 assert prop.id == "cDateTest"
207 assert prop.value == "1900/01/01 00:00:00 US/Central"
208 assert prop.path == "Devices/"
209 assert prop.set_value(path='Devices/Server/TEST/devices/test.example.com', value="2017/12/19 00:00:00 US/Pacific")
210 assert prop.value == "2017/12/19 00:00:00 US/Pacific"
211 assert prop.path == "Devices/Server/TEST/devices/test.example.com"
213 def test_properties_router_zenosscustomproperty_delete(self, responses):
214 responses_callback(responses)
216 pr = PropertiesRouter(url, headers, True)
217 props = pr.get_custom_properties('test.example.com', params=dict(id='cDateTest', islocal=1))
218 prop = props['properties'][0]
219 assert prop.islocal == 1
220 assert prop.path == "Devices/Server/TEST/devices/test.example.com"
221 assert prop.value == "2017/12/19 00:00:00 US/Pacific"
222 assert prop.delete()
223 assert prop.islocal == 0
224 assert prop.path == "/"
225 assert prop.value == "1900/01/01 00:00:00 US/Central"
227 def test_properties_router_zenosscustomproperty_delete_non_local(self, responses):
228 responses_callback(responses)
230 pr = PropertiesRouter(url, headers, True)
231 props = pr.get_custom_properties('test.example.com')
232 prop = props['properties'][0]
233 assert prop.islocal == 0
234 assert not prop.delete()