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

1import json 

2import pytest 

3from zenossapi.apiclient import ZenossAPIClientError 

4from zenossapi.routers.properties import PropertiesRouter, ZenossProperty, ZenossCustomProperty 

5import properties_resp 

6 

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) 

18 

19 

20def request_callback(request): 

21 rdata = json.loads(request.body) 

22 resp_headers = dict(ContentType='application/json') 

23 

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 

33 

34 return properties_resp.props 

35 

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 

40 

41 return properties_resp.custom_props 

42 

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 

48 

49 def deleteZenProperty(rdata): 

50 return properties_resp.delete_prop 

51 

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 } 

63 

64 method = locals()[rdata['method']] 

65 resp_body = method(rdata['data'][0]) 

66 

67 return (200, resp_headers, json.dumps(resp_body)) 

68 

69 

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 ) 

77 

78 

79class TestPropertiesRouter(object): 

80 

81 def test_properties_router_init(self): 

82 pr = PropertiesRouter(url, headers, True) 

83 assert pr.id is None 

84 

85 def test_properties_router_list_properties(self, responses): 

86 responses_callback(responses) 

87 

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" 

93 

94 def test_properties_router_get_properties(self, responses): 

95 responses_callback(responses) 

96 

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" 

103 

104 def test_properties_router_list_local_properties(self, responses): 

105 responses_callback(responses) 

106 

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" 

112 

113 def test_properties_router_get_local_properties(self, responses): 

114 responses_callback(responses) 

115 

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" 

122 

123 def test_properties_router_get_property(self, responses): 

124 responses_callback(responses) 

125 

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' 

130 

131 def test_properties_router_list_custom_properties(self, responses): 

132 responses_callback(responses) 

133 

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'] == "/" 

140 

141 def test_properties_router_get_custom_properties(self, responses): 

142 responses_callback(responses) 

143 

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" 

150 

151 def test_properties_router_get_custom_property(self, responses): 

152 responses_callback(responses) 

153 

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/" 

159 

160 def test_properties_router_set_property_value(self, responses): 

161 responses_callback(responses) 

162 

163 pr = PropertiesRouter(url, headers, True) 

164 prop = pr.set_property_value('test.example.com', 'zWinTrustedRealm', value='Westeros') 

165 assert prop is True 

166 

167 def test_properties_router_zenossproperty_set_value(self, responses): 

168 responses_callback(responses) 

169 

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" 

177 

178 def test_properties_router_zenossproperty_delete(self, responses): 

179 responses_callback(responses) 

180 

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 == "/" 

191 

192 def test_properties_router_zenossproperty_delete_non_local(self, responses): 

193 responses_callback(responses) 

194 

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() 

199 

200 def test_properties_router_zenosscustomproperty_set_value(self, responses): 

201 responses_callback(responses) 

202 

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" 

212 

213 def test_properties_router_zenosscustomproperty_delete(self, responses): 

214 responses_callback(responses) 

215 

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" 

226 

227 def test_properties_router_zenosscustomproperty_delete_non_local(self, responses): 

228 responses_callback(responses) 

229 

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()