2009-08-05 17:34:45 +02:00
|
|
|
#!/usr/bin/python
|
|
|
|
|
2009-08-07 17:40:03 +02:00
|
|
|
from config import hostname, port, username, password
|
2009-08-05 17:34:45 +02:00
|
|
|
|
2012-03-15 15:59:08 +01:00
|
|
|
import math
|
2009-08-05 17:34:45 +02:00
|
|
|
import sys
|
2010-07-13 18:02:56 +02:00
|
|
|
import sogotests
|
2012-03-15 15:59:08 +01:00
|
|
|
import time
|
2009-08-05 17:34:45 +02:00
|
|
|
import unittest
|
|
|
|
import webdavlib
|
|
|
|
|
|
|
|
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):
|
2010-07-13 18:02:56 +02:00
|
|
|
"""webdav sync"""
|
2009-08-05 17:34:45 +02:00
|
|
|
# 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)
|
2009-08-05 18:44:50 +02:00
|
|
|
# (when done, non-empty collection:
|
2009-08-05 17:34:45 +02:00
|
|
|
# without a token (query3)
|
2009-08-05 18:44:50 +02:00
|
|
|
# with a token (query4))
|
2009-08-05 17:34:45 +02:00
|
|
|
|
|
|
|
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"]))
|
2010-06-01 20:14:17 +02:00
|
|
|
token_node = query1.response["document"].find("{DAV:}sync-token")
|
2009-08-05 17:34:45 +02:00
|
|
|
# Implicit "assertion": we expect SOGo to return a token node, with a
|
|
|
|
# non-empty numerical value. Anything else will trigger an exception
|
2010-06-01 20:14:17 +02:00
|
|
|
token = int(token_node.text)
|
2009-08-05 17:34:45 +02:00
|
|
|
|
|
|
|
self.assertTrue(token > 0)
|
2012-03-15 15:59:08 +01:00
|
|
|
query1EndTime = int(math.ceil(query1.start + query1.duration))
|
|
|
|
self.assertTrue(token <= query1EndTime,
|
2012-03-16 21:41:52 +01:00
|
|
|
"token = %d > query1EndTime = %d" % (token, query1EndTime))
|
2009-08-05 17:34:45 +02:00
|
|
|
|
2012-03-15 15:59:08 +01:00
|
|
|
# we make sure that any token is accepted when the collection is
|
2010-07-13 17:05:27 +02:00
|
|
|
# empty, but that the returned token differs
|
2009-08-05 17:34:45 +02:00
|
|
|
query2 = webdavlib.WebDAVSyncQuery(resource, "1234", [ "getetag" ])
|
|
|
|
self.client.execute(query2)
|
2010-07-13 17:05:27 +02:00
|
|
|
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)
|
2009-08-05 17:34:45 +02:00
|
|
|
|
|
|
|
if __name__ == "__main__":
|
2010-07-13 18:02:56 +02:00
|
|
|
sogotests.runTests()
|