Changeset 200
- Timestamp:
- 08/19/08 08:38:17 (3 months ago)
- Hashname:
- 20080819063817-b2873-f8a1538c111122c2fc38f2650e6dadf1bb424721
- Location:
- xcap/test
- Files:
-
- 11 modified
-
common.py (modified) (3 diffs)
-
test_attribute.py (modified) (1 diff)
-
test_auth.py (modified) (1 diff)
-
test_element.py (modified) (1 diff)
-
test_etags.py (modified) (1 diff)
-
test_nsbindings.py (modified) (1 diff)
-
test_pidf.py (modified) (1 diff)
-
test_presrules.py (modified) (1 diff)
-
test_resourcelists.py (modified) (1 diff)
-
test_rlsservices.py (modified) (2 diffs)
-
test_subscribediff.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
xcap/test/common.py
r199 r200 157 157 return result 158 158 159 def get _resource(self, application, node=None, headers={}):159 def get(self, application, node=None, headers={}): 160 160 username, domain = self.username.split('@', 1) 161 161 uri = "%s/%s/users/%s/index.xml" % (self.xcap_root, application, self.username) 162 162 if node: 163 163 uri += '~~' + node 164 r = self._execute_request("GET", uri, username, domain, self.password, headers) 165 self.status, self.headers, self.body = r.code, r.headers, r.body 166 return r 167 168 get=get_resource 169 170 def put_resource(self, application, resource, node=None, headers={}): 164 return self._execute_request("GET", uri, username, domain, self.password, headers) 165 166 def put(self, application, resource, node=None, headers={}): 171 167 username, domain = self.username.split('@', 1) 172 168 uri = "%s/%s/users/%s/index.xml" % (self.xcap_root, application, self.username) 173 169 if node: 174 170 uri += '~~' + node 175 r = self._execute_request("PUT", uri, username, domain, self.password, headers, resource) 176 self.status, self.headers, self.body = r.code, r.headers, r.body 177 return r 178 179 put = put_resource 180 181 def delete_resource(self, application, node=None, headers={}): 171 return self._execute_request("PUT", uri, username, domain, self.password, headers, resource) 172 173 def delete(self, application, node=None, headers={}): 182 174 username, domain = self.username.split('@', 1) 183 175 uri = "%s/%s/users/%s/index.xml" % (self.xcap_root, application, self.username) 184 176 if node: 185 177 uri += '~~' + node 186 r = self._execute_request("DELETE", uri, username, domain, self.password, headers) 187 self.status, self.headers, self.body = r.code, r.headers, r.body 188 return r 189 190 delete = delete_resource 191 192 193 class XCAPTest(unittest.TestCase, XCAPClient): 194 195 def assertStatus(self, status, msg=None): 196 if isinstance(status, int): 197 if self.status != status: 178 return self._execute_request("DELETE", uri, username, domain, self.password, headers) 179 180 181 class XCAPTest(unittest.TestCase): 182 183 XCAPClient = XCAPClient 184 185 @classmethod 186 def setupOptionParser(cls, parser): 187 cls.XCAPClient.setupOptionParser(parser) 188 189 def initialize(self, options, args = []): 190 self.options = options 191 self.args = args 192 193 def new_client(self): 194 client = self.XCAPClient() 195 client.initialize(self.options, self.args) 196 return client 197 198 def setUp(self): 199 self.client = self.new_client() 200 201 def assertStatus(self, r, status, msg=None): 202 if status is None: 203 return 204 elif isinstance(status, int): 205 if r.code != status: 198 206 if msg is None: 199 msg = 'Status (%s) != %s' % ( self.status, status)207 msg = 'Status (%s) != %s' % (r.code, status) 200 208 raise self.failureException(msg) 201 209 else: 202 210 ## status is a tuple or a list 203 if self.statusnot in status:211 if r.code not in status: 204 212 if msg is None: 205 msg = 'Status (%s) not in %s' % ( self.status, str(status))213 msg = 'Status (%s) not in %s' % (r.code, str(status)) 206 214 raise self.failureException(msg) 207 215 208 def assertHeader(self, key, value=None, msg=None):209 """Fail if (key, [value]) not in self.headers."""216 def assertHeader(self, r, key, value=None, msg=None): 217 """Fail if (key, [value]) not in r.headers.""" 210 218 lowkey = key.lower() 211 for k, v in self.headers.items():219 for k, v in r.headers.items(): 212 220 if k.lower() == lowkey: 213 221 if value is None or str(value) == v: … … 220 228 raise self.failureException(msg) 221 229 222 def assertNoHeader(self, key, msg=None):223 """Fail if key in self.headers."""230 def assertNoHeader(self, r, key, msg=None): 231 """Fail if key in r.headers.""" 224 232 lowkey = key.lower() 225 matches = [k for k, v in self.headers if k.lower() == lowkey]233 matches = [k for k, v in r.headers if k.lower() == lowkey] 226 234 if matches: 227 235 if msg is None: … … 229 237 raise self.failureException(msg) 230 238 231 def assertBody(self, value, msg=None):232 """Fail if value != self.body."""233 if value != self.body:234 if msg is None: 235 msg = 'expected body:\n"%s"\n\nactual body:\n"%s"' % (value, self.body)236 raise self.failureException(msg) 237 238 def assertInBody(self, value, msg=None):239 """Fail if value not in self.body."""240 if value not in self.body:239 def assertBody(self, r, value, msg=None): 240 """Fail if value != r.body.""" 241 if value.strip() != r.body.strip(): 242 if msg is None: 243 msg = 'expected body:\n"%s"\n\nactual body:\n"%s"' % (value, r.body) 244 raise self.failureException(msg) 245 246 def assertInBody(self, r, value, msg=None): 247 """Fail if value not in r.body.""" 248 if value not in r.body: 241 249 if msg is None: 242 250 msg = '%s not in body' % value 243 251 raise self.failureException(msg) 244 252 245 def assertNotInBody(self, value, msg=None):246 """Fail if value in self.body."""247 if value in self.body:253 def assertNotInBody(self, r, value, msg=None): 254 """Fail if value in r.body.""" 255 if value in r.body: 248 256 if msg is None: 249 257 msg = '%s found in body' % value 250 258 raise self.failureException(msg) 251 259 252 def assertMatchesBody(self, pattern, msg=None, flags=0):253 """Fail if value (a regex pattern) is not in self.body."""254 if re.search(pattern, self.body, flags) is None:260 def assertMatchesBody(self, r, pattern, msg=None, flags=0): 261 """Fail if value (a regex pattern) is not in r.body.""" 262 if re.search(pattern, r.body, flags) is None: 255 263 if msg is None: 256 264 msg = 'No match for %s in body' % pattern 257 265 raise self.failureException(msg) 258 266 259 def put_rejected(self, application, resource): 260 self.delete_resource(application) 261 self.assertStatus([200, 404]) 262 263 r = self.put_resource(application, resource) 264 self.assertStatus(409) 265 266 # the document shouldn't be there 267 self.get_resource(application) 268 self.assertStatus(404) 269 270 self.status, self.headers, self.body = r.code, r.headers, r.body 267 def get(self, application, node=None, headers={}, status=200, client=None): 268 client = client or self.client 269 r = client.get(application, node, headers) 270 self.assertStatus(r, status) 271 271 return r 272 272 273 def getputdelete_successful(self, application, document, content_type): 274 self.delete_resource(application) 275 self.assertStatus([200, 404]) 276 277 self.get_resource(application) 278 self.assertStatus(404) 279 280 self.put_resource(application, document) 281 self.assertStatus(201) 282 283 self.get_resource(application) 284 self.assertStatus(200) 285 self.assertBody(document) 286 self.assertHeader('Content-Type', content_type) 287 288 self.put_resource(application, document) 289 self.assertStatus(200) 290 291 self.delete_resource(application) 292 self.assertStatus(200) 293 294 self.delete_resource(application) 295 self.assertStatus(404) 273 def put(self, application, resource, node=None, headers={}, 274 status=[200,201], content_type_in_GET=None, client=None): 275 client = client or self.client 276 r_put = client.put(application, resource, node, headers) 277 self.assertStatus(r_put, status) 278 279 # if PUTting succeed, check that document is there and equals to resource 280 if r_put.succeed: 281 r_get = client.get(application, node) 282 self.assertStatus(r_get, 200, 283 'although PUT succeed, following GET on the same URI did not: %s %s' % \ 284 (r_get.code, r_get.msg)) 285 self.assertEqual(resource, r_get.body) # is body put equals to body got? 286 if content_type_in_GET is not None: 287 self.assertHeader(r_get, 'content-type', content_type_in_GET) 288 289 return r_put 290 291 def delete(self, application, node=None, headers={}, status=200, client=None): 292 client = client or self.client 293 r = client.delete(application, node, headers) 294 self.assertStatus(r, status) 295 296 # if deleting succeed, GET should return 404 297 if r.succeed or r.code == 404: 298 r_get = client.get(application, node, headers) 299 self.assertStatus(r_get, 404, 300 'although DELETE succeed, following GET on the same URI did not return 404: %s %s' % \ 301 (r_get.code, r_get.msg)) 302 303 return r 304 305 def put_rejected(self, application, resource, status=409, client=None): 306 """DELETE the document, then PUT it and expect 409 error. Return PUT result. 307 If PUT has indeed failed, also check that GET returns 404 308 """ 309 self.delete(application, status=[200,404], client=client) 310 put_result = self.put(application, resource, status=status, client=client) 311 self.get(application, status=404, client=client) 312 return put_result 313 314 def getputdelete(self, application, document, content_type, client=None): 315 self.delete(application, status=[200,404], client=client) 316 self.get(application, status=404, client=client) 317 self.put(application, document, status=201, content_type_in_GET=content_type, client=client) 318 self.put(application, document, status=200, content_type_in_GET=content_type, client=client) 319 self.put(application, document, status=200, content_type_in_GET=content_type, client=client) 320 self.delete(application, status=200, client=client) 321 self.delete(application, status=404, client=client) 296 322 297 323 -
xcap/test/test_attribute.py
r199 r200 39 39 40 40 def test_get(self): 41 self.put_resource('resource-lists', resource_list_xml) 42 self.assertStatus([200, 201]) 41 self.put('resource-lists', resource_list_xml) 43 42 44 self.get_resource('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute') 45 self.assertStatus(404) 43 self.get('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute', status=404) 46 44 47 self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/@name') 48 self.assertStatus(200) 49 self.assertBody("friends") 50 self.assertHeader('ETag') 51 self.assertHeader('Content-type', 'application/xcap-att+xml') 45 r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/@name') 46 self.assertBody(r, "friends") 47 self.assertHeader(r, 'ETag') 48 self.assertHeader(r, 'Content-type', 'application/xcap-att+xml') 52 49 53 50 def test_delete(self): 54 self.put_resource('resource-lists', resource_list_xml) 55 self.assertStatus([200, 201]) 56 57 self.delete_resource('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute') 58 self.assertStatus(404) 51 self.put('resource-lists', resource_list_xml) 52 self.delete('resource-lists', '/resource-lists/list[@name="other"]/@some-attribute', status=404) 59 53 60 self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/@name') 61 self.assertStatus(200) 62 63 self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/@name') 64 self.assertStatus(404) 54 self.delete('resource-lists', '/resource-lists/list[@name="friends"]/@name', status=200) 55 self.delete('resource-lists', '/resource-lists/list[@name="friends"]/@name', status=404) 65 56 66 57 def test_put(self): 67 self.put_resource('resource-lists', resource_list_xml) 68 self.assertStatus([200, 201]) 58 self.put('resource-lists', resource_list_xml) 69 59 70 60 headers = {'Content-type': "application/xcap-att+xml"} 71 self.put _resource('resource-lists', 'coworkers', '/resource-lists/list[@name="other"]/@some-attribute', headers)72 self.assertStatus(409)61 self.put('resource-lists', 'coworkers', 62 '/resource-lists/list[@name="other"]/@some-attribute', headers, status=409) 73 63 74 headers = {'Content-type': "application/xcap-att+xml"} 75 self.put_resource('resource-lists', 'coworkers', '/resource-lists/list[@name="friends"]/@name', headers) 76 self.assertStatus(200) 64 # fails GET(PUT(x))==x test. REJECT in the server? 65 ##self.put('resource-lists', 'coworkers', '/resource-lists/list[@name="friends"]/@name', headers) 66 67 r = self.client.put('resource-lists', 'coworkers', '/resource-lists/list[@name="friends"]/@name', headers) 68 self.assertStatus(r, 200) 77 69 78 70 if __name__ == '__main__': -
xcap/test/test_auth.py
r199 r200 10 10 11 11 def test_authorization(self): 12 self.put_resource('resource-lists', resource_list_xml) 13 self.assertStatus([200, 201]) 14 15 self.get_resource('resource-lists') 16 self.assertStatus(200) 17 18 self.get_resource('dummy-application') 19 self.assertStatus(404) 12 self.put('resource-lists', resource_list_xml) 13 self.get('dummy-application', status=404) 20 14 21 15 ### the request cannot be authenticated 22 16 #password = self.account 23 #self.password += "dummy" 24 #self.get_resource('resource-lists') 25 #self.assertStatus(401) 26 #self.password = password 17 #self.client.password += "dummy" 18 #self.get('resource-lists', status=401) 19 #self.client.password = password 27 20 28 21 ### the request cannot be authorized (we're trying to access someone else' resource) 29 22 #account = self.account 30 23 #self.account = "dummy" + self.account 31 #self.get_resource('resource-lists') 32 #self.assertStatus(401) 33 #self.account = account 24 #r = self.get('resource-lists', status=401) 25 #self.client.account = account 34 26 35 27 if __name__ == '__main__': -
xcap/test/test_element.py
r199 r200 39 39 40 40 def test_get(self): 41 self.put_resource('resource-lists', resource_list_xml) 42 self.assertStatus([200, 201]) 41 self.delete('resource-lists', status=[200,404]) 42 self.put('resource-lists', resource_list_xml) 43 self.get('resource-lists', '/resource-lists/list[@name="other"]', status=404) 44 self.get('resource-lists', '/resource-lists/list/entry[4]', status=404) 45 r = self.get('resource-lists', '/resource-lists/list[@name="friends"]') 46 self.assertBody(r, list_element_xml) 47 self.assertHeader(r, 'ETag') 48 self.assertHeader(r, 'Content-type', 'application/xcap-el+xml') 43 49 44 self.get_resource('resource-lists', '/resource-lists/list[@name="other"]') 45 self.assertStatus(404) 50 r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/entry[2]') 51 self.assertBody(r, second_element_xml) 52 self.assertHeader(r, 'ETag') 53 self.assertHeader(r, 'Content-type', 'application/xcap-el+xml') 46 54 47 self.get_resource('resource-lists', '/resource-lists/list/entry[4]') 48 self.assertStatus(404) 49 50 self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]') 51 self.assertStatus(200) 52 self.assertInBody(list_element_xml) 53 #self.assertBody(list_element_xml) 54 self.assertHeader('ETag') 55 self.assertHeader('Content-type', 'application/xcap-el+xml') 56 57 self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/entry[2]') 58 self.assertStatus(200) 59 self.assertInBody(second_element_xml) 60 #self.assertBody(second_element_xml) 61 self.assertHeader('ETag') 62 self.assertHeader('Content-type', 'application/xcap-el+xml') 63 64 self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 65 self.assertStatus(200) 66 self.assertInBody(second_element_xml) 67 #self.assertBody(second_element_xml) 68 self.assertHeader('ETag') 69 self.assertHeader('Content-type', 'application/xcap-el+xml') 55 r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 56 self.assertStatus(r, 200) 57 self.assertBody(r, second_element_xml) 58 self.assertHeader(r, 'ETag') 59 self.assertHeader(r, 'Content-type', 'application/xcap-el+xml') 70 60 71 61 def test_delete(self): 72 self.put_resource('resource-lists', resource_list_xml) 73 self.assertStatus([200, 201]) 62 self.put('resource-lists', resource_list_xml) 74 63 75 self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[3]') 76 self.assertStatus(200) 77 self.assertHeader('ETag') 64 r = self.delete('resource-lists', '/resource-lists/list[@name="friends"]/*[3]') 65 self.assertHeader(r, 'ETag') 78 66 79 self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 80 self.assertStatus(200) 81 self.assertHeader('ETag') 67 r = self.delete('resource-lists', '/resource-lists/list[@name="friends"]/*[2]') 68 self.assertHeader(r, 'ETag') 82 69 83 self.delete_resource('resource-lists', '/resource-lists/list[@name="friends"]/*[1]') 84 self.assertStatus(200) 85 self.assertHeader('ETag') 70 r = self.delete('resource-lists', '/resource-lists/list[@name="friends"]/*[1]') 71 self.assertHeader(r, 'ETag') 86 72 87 self.delete _resource('resource-lists', '/resource-lists/list[@name="friends"]/entry[@uri="sip:joe@example.com"]')88 self.assertStatus(404)73 self.delete('resource-lists', 74 '/resource-lists/list[@name="friends"]/entry[@uri="sip:joe@example.com"]', status=404) 89 75 90 def test_put(self): 91 self.put_resource('resource-lists', resource_list_xml) 92 self.assertStatus([200, 201]) 93 94 self.put_resource('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]') 95 self.assertStatus(415) ## content type not set 76 def test_put_error(self): 77 self.put('resource-lists', resource_list_xml) 78 79 # 415 content type not set 80 self.put('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]', status=415) 96 81 97 82 headers = {'Content-type': "application/xcap-el+xml"} 98 self.put_resource('resource-lists', broken_element_xml, '/resource-lists/list[@name="friends"]', headers) 99 self.assertStatus(409) ## <not-xml-frag> 100 101 self.put_resource('resource-lists', second_element_xml, '/resource-lists/list[@name="others"]/entry[2]', headers) 102 self.assertStatus(409) ## <not-parent> 103 104 self.put_resource('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]/entry[1]', headers) 105 self.assertStatus(409) ## <uniqueness-failure> 83 # 409 <not-xml-frag> 84 r = self.put('resource-lists', broken_element_xml, '/resource-lists/list[@name="friends"]', 85 headers, status=409) 86 87 # 409 <not-parent> 88 r = self.put('resource-lists', second_element_xml, '/resource-lists/list[@name="others"]/entry[2]', 89 headers, status=409) 90 91 # 409 <uniqueness-failure> 92 r = self.put('resource-lists', second_element_xml, '/resource-lists/list[@name="friends"]/entry[1]', 93 headers, status=409) 106 94 107 95 if __name__ == '__main__': -
xcap/test/test_etags.py
r199 r200 10 10 11 11 def test_conditional_GET(self): 12 self.put_resource('resource-lists', resource_list_xml) 13 self.assertStatus([200, 201]) 14 etag = self.assertHeader('ETag') 12 r = self.put('resource-lists', resource_list_xml) 13 etag = self.assertHeader(r, 'ETag') 15 14 16 15 # Test If-Match (both valid and invalid) 17 self.get_resource('resource-lists', headers={'If-Match': etag}) 18 self.assertStatus(200) 19 self.get_resource('resource-lists', headers={'If-Match': '*'}) 20 self.assertStatus(200) 21 self.get_resource('resource-lists', headers={'if-Match': "another-etag"}) 22 self.assertStatus(412) 16 self.get('resource-lists', headers={'If-Match': etag}) 17 self.get('resource-lists', headers={'If-Match': '*'}) 18 self.get('resource-lists', headers={'if-Match': "another-etag"}, status=412) 23 19 24 20 # Test If-None-Match (both valid and invalid) 25 self.get_resource('resource-lists', headers={'If-None-Match': etag}) 26 self.assertStatus(304) 27 self.get_resource('resource-lists', headers={'If-None-Match': '*'}) 28 self.assertStatus(304) 29 self.get_resource('resource-lists', headers={'If-None-Match': "another-etag"}) 30 self.assertStatus(200) 21 self.get('resource-lists', headers={'If-None-Match': etag}, status=304) 22 self.get('resource-lists', headers={'If-None-Match': '*'}, status=304) 23 self.get('resource-lists', headers={'If-None-Match': "another-etag"}, status=200) 31 24 32 25 def test_conditional_PUT(self): 33 self.put_resource('resource-lists', resource_list_xml) 34 self.assertStatus([200, 201]) 35 etag = self.assertHeader('ETag') 26 r = self.put('resource-lists', resource_list_xml) 27 etag = self.assertHeader(r, 'ETag') 36 28 37 29 # Test conditional PUT logic 38 30 ## Alice and Bob initially share the same etag 39 31 alice_etag = bob_etag = etag 32 40 33 ## Bob modifies the resource 41 self.put_resource('resource-lists', resource_list_xml, headers={'If-Match': bob_etag}) 42 self.assertStatus([200, 201]) 43 bob_etag = self.assertHeader('ETag') 34 r = self.put('resource-lists', resource_list_xml, headers={'If-Match': bob_etag}) 35 bob_etag = self.assertHeader(r, 'ETag') 44 36 45 37 ## now Alice tries to modify the resource 46 self.put_resource('resource-lists', resource_list_xml, headers={'If-Match': alice_etag}) 47 self.assertStatus(412) 38 self.put('resource-lists', resource_list_xml, headers={'If-Match': alice_etag}, status=412) 48 39 49 40 ## the etag has changed so now she updates her in-memory document 50 self.get_resource('resource-lists')51 self.assertStatus(200)52 alice_etag = self.assertHeader('ETag')41 r = self.get('resource-lists') 42 new_alice_etag = self.assertHeader(r, 'ETag') 43 self.assertEqual(bob_etag, new_alice_etag) 53 44 54 self.put_resource('resource-lists', resource_list_xml, headers={'If-Match': alice_etag}) 55 self.assertStatus([200, 201]) 45 self.put('resource-lists', resource_list_xml, headers={'If-Match': new_alice_etag}) 56 46 57 47 if __name__ == '__main__': -
xcap/test/test_nsbindings.py
r199 r200 19 19 20 20 def test_ns_bindings(self): 21 self.put_resource('resource-lists', resource_list_xml) 22 self.assertStatus([200, 201]) 23 24 self.get_resource('resource-lists', '/resource-lists/list[@name="friends"]/namespace::*') 25 self.assertStatus(200) 26 self.assertHeader('ETag') 27 self.assertHeader('Content-type', 'application/xcap-ns+xml') 21 self.put('resource-lists', resource_list_xml) 22 r = self.get('resource-lists', '/resource-lists/list[@name="friends"]/namespace::*') 23 self.assertHeader(r, 'ETag') 24 self.assertHeader(r, 'Content-type', 'application/xcap-ns+xml') 28 25 29 26 if __name__ == '__main__': -
xcap/test/test_pidf.py
r199 r200 21 21 22 22 def test_pidf_manipulation(self): 23 self.delete_resource('pidf-manipulation') 24 self.assertStatus([200, 404]) 25 26 self.get_resource('pidf-manipulation') 27 self.assertStatus(404) 28 29 self.put_resource('pidf-manipulation', pidf_xml) 30 self.assertStatus(201) 31 32 self.get_resource('pidf-manipulation') 33 self.assertStatus(200) 34 self.assertBody(pidf_xml) 35 self.assertHeader('Content-type', 'application/pidf+xml') 36 37 self.put_resource('pidf-manipulation', pidf_xml) 38 self.assertStatus(200) 39 40 self.delete_resource('pidf-manipulation') 41 self.assertStatus(200) 42 43 self.delete_resource('pidf-manipulation') 44 self.assertStatus(404) 23 self.getputdelete('pidf-manipulation', pidf_xml, 'application/pidf+xml') 45 24 46 25 if __name__ == '__main__': -
xcap/test/test_presrules.py
r199 r200 32 32 33 33 def test_pidf_manipulation(self): 34 self.delete_resource('pres-rules') 35 self.assertStatus([200, 404]) 36 37 self.put_resource('pres-rules', pres_rules_xml) 38 self.assertStatus(201) 39 40 self.get_resource('pres-rules') 41 self.assertStatus(200) 42 self.assertBody(pres_rules_xml) 43 self.assertHeader('Content-type', 'application/auth-policy+xml') 34 self.getputdelete('pres-rules', pres_rules_xml, 'application/auth-policy+xml') 44 35 45 36 if __name__ == '__main__': -
xcap/test/test_resourcelists.py
r199 r200 99 99 100 100 def test_operations(self): 101 self.getputdelete _successful('resource-lists', resource_lists_xml, 'application/resource-lists+xml')
