sogo/Tests/Integration/test-webdavsync.py
Jean Raby eb64356858 Verbose error if the assertion fails
Monotone-Parent: e18b5ae2235fde5d7f7f569ead8452a2217d9b5c
Monotone-Revision: 057f323db2fa6be4670dc58350ff09cbbc11113b

Monotone-Author: jraby@inverse.ca
Monotone-Date: 2012-02-15T18:14:19
Monotone-Branch: ca.inverse.sogo
2012-02-15 18:14:19 +00:00

70 lines
2.6 KiB
Python
Executable file

#!/usr/bin/python
from config import hostname, port, username, password
import sys
import sogotests
import unittest
import webdavlib
import time
resource = '/SOGo/dav/%s/Calendar/test-webdavsync/' % username
class WebdavSyncTest(unittest.TestCase):
def setUp(self):
self.client = webdavlib.WebDAVClient(hostname, port,
username, password)
def tearDown(self):
delete = webdavlib.WebDAVDELETE(resource)
self.client.execute(delete)
def test(self):
"""webdav sync"""
# missing tests:
# invalid tokens: negative, non-numeric, > current timestamp
# non-empty collections: token validity, status codes for added,
# modified and removed elements
# preparation
mkcol = webdavlib.WebDAVMKCOL(resource)
self.client.execute(mkcol)
self.assertEquals(mkcol.response["status"], 201,
"preparation: failure creating collection (code != 201)")
# test queries:
# empty collection:
# without a token (query1)
# with a token (query2)
# (when done, non-empty collection:
# without a token (query3)
# with a token (query4))
query1 = webdavlib.WebDAVSyncQuery(resource, None, [ "getetag" ])
self.client.execute(query1)
self.assertEquals(query1.response["status"], 207,
("query1: invalid status code: %d (!= 207)"
% query1.response["status"]))
token_node = query1.response["document"].find("{DAV:}sync-token")
# Implicit "assertion": we expect SOGo to return a token node, with a
# non-empty numerical value. Anything else will trigger an exception
token = int(token_node.text)
self.assertTrue(token > 0)
self.assertTrue(token <= int(query1.start),
"token = %d > query.start = %d" % (token, int(query1.start)))
# we make sure that any token is acceoted when the collection is
# empty, but that the returned token differs
query2 = webdavlib.WebDAVSyncQuery(resource, "1234", [ "getetag" ])
self.client.execute(query2)
self.assertEquals(query2.response["status"], 207)
token_node = query2.response["document"].find("{DAV:}sync-token")
self.assertTrue(token_node is not None,
"expected 'sync-token' tag")
token = int(token_node.text)
self.assertTrue(token > 0)
if __name__ == "__main__":
sogotests.runTests()