[CalendarServer-changes] [6850] CalendarServer/trunk/txdav/base/propertystore

source_changes at macosforge.org source_changes at macosforge.org
Wed Feb 2 11:07:05 PST 2011


Revision: 6850
          http://trac.macosforge.org/projects/calendarserver/changeset/6850
Author:   wsanchez at apple.com
Date:     2011-02-02 11:07:05 -0800 (Wed, 02 Feb 2011)
Log Message:
-----------
Add tests for none property store

Modified Paths:
--------------
    CalendarServer/trunk/txdav/base/propertystore/base.py
    CalendarServer/trunk/txdav/base/propertystore/none.py
    CalendarServer/trunk/txdav/base/propertystore/test/base.py
    CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py
    CalendarServer/trunk/txdav/base/propertystore/xattr.py

Added Paths:
-----------
    CalendarServer/trunk/txdav/base/propertystore/test/test_none.py

Modified: CalendarServer/trunk/txdav/base/propertystore/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/base.py	2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/base.py	2011-02-02 19:07:05 UTC (rev 6850)
@@ -98,8 +98,8 @@
     """
     implements(IPropertyStore)
 
-    _defaultShadowableKeys = set()
-    _defaultGlobalKeys = set((
+    _defaultShadowableKeys = frozenset()
+    _defaultGlobalKeys = frozenset((
         PropertyName.fromElement(davxml.ACL),
         PropertyName.fromElement(davxml.ResourceID),
         PropertyName.fromElement(davxml.ResourceType),
@@ -108,7 +108,7 @@
         PropertyName.fromElement(TwistedQuotaRootProperty),
     ))
 
-    def __init__(self, defaultuser):
+    def __init__(self, defaultUser):
         """
         Instantiate the property store for a user. The default is the default user
         (owner) property to read in the case of global or shadowable properties.
@@ -117,7 +117,7 @@
         @type defaultuser: C{str}
         """
         
-        self._peruser = self._defaultuser = defaultuser
+        self._perUser = self._defaultUser = defaultUser
         self._shadowableKeys = set(AbstractPropertyStore._defaultShadowableKeys)
         self._globalKeys = set(AbstractPropertyStore._defaultGlobalKeys)
 
@@ -126,7 +126,7 @@
         return "<%s>" % (self.__class__.__name__)
 
     def _setPerUserUID(self, uid):
-        self._peruser = uid
+        self._perUser = uid
 
     def setSpecialProperties(self, shadowableKeys, globalKeys):
         self._shadowableKeys.update(shadowableKeys)
@@ -162,34 +162,34 @@
         # Handle per-user behavior 
         if self.isShadowableProperty(key):
             try:
-                result = self._getitem_uid(key, self._peruser)
+                result = self._getitem_uid(key, self._perUser)
             except KeyError:
-                result = self._getitem_uid(key, self._defaultuser)
+                result = self._getitem_uid(key, self._defaultUser)
             return result
         elif self.isGlobalProperty(key):
-            return self._getitem_uid(key, self._defaultuser)
+            return self._getitem_uid(key, self._defaultUser)
         else:
-            return self._getitem_uid(key, self._peruser)
+            return self._getitem_uid(key, self._perUser)
 
     def __setitem__(self, key, value):
         # Handle per-user behavior 
         if self.isGlobalProperty(key):
-            return self._setitem_uid(key, value, self._defaultuser)
+            return self._setitem_uid(key, value, self._defaultUser)
         else:
-            return self._setitem_uid(key, value, self._peruser)
+            return self._setitem_uid(key, value, self._perUser)
 
     def __delitem__(self, key):
         # Handle per-user behavior 
         if self.isGlobalProperty(key):
-            self._delitem_uid(key, self._defaultuser)
+            self._delitem_uid(key, self._defaultUser)
         else:
-            self._delitem_uid(key, self._peruser)
+            self._delitem_uid(key, self._perUser)
 
     def keys(self):
         
-        userkeys = list(self._keys_uid(self._peruser))
-        if self._defaultuser != self._peruser:
-            defaultkeys = self._keys_uid(self._defaultuser)
+        userkeys = list(self._keys_uid(self._perUser))
+        if self._defaultUser != self._perUser:
+            defaultkeys = self._keys_uid(self._defaultUser)
             for key in defaultkeys:
                 if self.isShadowableProperty(key) and key not in userkeys:
                     userkeys.append(key)

Modified: CalendarServer/trunk/txdav/base/propertystore/none.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/none.py	2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/none.py	2011-02-02 19:07:05 UTC (rev 6850)
@@ -31,7 +31,6 @@
     Always-empty property store.
     Writing properties is not allowed.
     """
-
     #
     # We override the UserDict items directly here rather than the _uid methods
     #

Modified: CalendarServer/trunk/txdav/base/propertystore/test/base.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/base.py	2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/test/base.py	2011-02-02 19:07:05 UTC (rev 6850)
@@ -36,14 +36,9 @@
 from txdav.base.propertystore.base import PropertyName
 
 
-class PropertyStoreTest(unittest.TestCase):
+class NonePropertyStoreTest(unittest.TestCase):
     # Subclass must define self.propertyStore in setUp().
 
-    def _changed(self, store):
-        store.flush()
-    def _abort(self, store):
-        store.abort()
-
     def test_interface(self):
         try:
             verifyObject(IPropertyStore, self.propertyStore)
@@ -51,6 +46,38 @@
             self.fail(e)
 
 
+    def test_delete_none(self):
+        def doDelete():
+            del self.propertyStore[propertyName("xyzzy")]
+
+        self.assertRaises(KeyError, doDelete)
+
+
+    def test_keyInPropertyName(self):
+        def doGet():
+            self.propertyStore["xyzzy"]
+        def doSet():
+            self.propertyStore["xyzzy"] = propertyValue("Hello, World!")
+        def doDelete():
+            del self.propertyStore["xyzzy"]
+        def doContains():
+            return "xyzzy" in self.propertyStore
+
+        self.assertRaises(TypeError, doGet)
+        self.assertRaises(TypeError, doSet)
+        self.assertRaises(TypeError, doDelete)
+        self.assertRaises(TypeError, doContains)
+
+
+class PropertyStoreTest(NonePropertyStoreTest):
+    # Subclass must define self.propertyStore in setUp().
+
+    def _changed(self, store):
+        store.flush()
+    def _abort(self, store):
+        store.abort()
+
+
     @inlineCallbacks
     def test_set_get_contains(self):
 
@@ -221,34 +248,6 @@
         self.assertEquals(len(self.propertyStore), len(names))
 
 
-    def test_delete_none(self):
-
-        def doDelete():
-            del self.propertyStore[propertyName("xyzzy")]
-
-        self.assertRaises(KeyError, doDelete)
-
-
-    def test_keyInPropertyName(self):
-
-        def doGet():
-            self.propertyStore["xyzzy"]
-
-        def doSet():
-            self.propertyStore["xyzzy"] = propertyValue("Hello, World!")
-
-        def doDelete():
-            del self.propertyStore["xyzzy"]
-
-        def doContains():
-            return "xyzzy" in self.propertyStore
-
-        self.assertRaises(TypeError, doGet)
-        self.assertRaises(TypeError, doSet)
-        self.assertRaises(TypeError, doDelete)
-        self.assertRaises(TypeError, doContains)
-
-
     @inlineCallbacks
     def test_flush(self):
 
@@ -306,6 +305,7 @@
 
         self.failUnless(name in self.propertyStore2.keys())
 
+
 def propertyName(name):
     return PropertyName("http://calendarserver.org/ns/test/", name)
 

Added: CalendarServer/trunk/txdav/base/propertystore/test/test_none.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/test_none.py	                        (rev 0)
+++ CalendarServer/trunk/txdav/base/propertystore/test/test_none.py	2011-02-02 19:07:05 UTC (rev 6850)
@@ -0,0 +1,54 @@
+##
+# Copyright (c) 2010 Apple Inc. All rights reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+##
+from twext.web2.dav.element.base import WebDAVTextElement
+
+"""
+Property store tests.
+"""
+
+from zope.interface.verify import verifyObject, BrokenMethodImplementation
+
+from txdav.idav import IPropertyStore, PropertyChangeNotAllowedError
+from txdav.base.propertystore.base import PropertyName
+from txdav.base.propertystore.none import PropertyStore
+from txdav.base.propertystore.test.base import propertyName, propertyValue
+
+from txdav.base.propertystore.test import base
+
+
+class PropertyStoreTest(base.NonePropertyStoreTest):
+    def setUp(self):
+        self.propertyStore = PropertyStore("user01")
+
+    def test_set(self):
+        def doSet():
+            self.propertyStore[propertyName("foo")] = propertyValue("bar")
+        self.assertRaises(PropertyChangeNotAllowedError, doSet)
+
+    def test_get(self):
+        self.assertRaises(KeyError, lambda: self.propertyStore[propertyName("foo")])
+
+    def test_len(self):
+        self.assertEquals(len(self.propertyStore), 0)
+
+    def test_keys(self):
+        self.assertEquals(self.propertyStore.keys(), ())
+
+    def test_flush(self):
+        self.propertyStore.flush()
+
+    def test_abort(self):
+        self.propertyStore.abort()

Modified: CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py	2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/test/test_xattr.py	2011-02-02 19:07:05 UTC (rev 6850)
@@ -20,9 +20,7 @@
 """
 
 from twext.python.filepath import CachingFilePath as FilePath
-
 from txdav.base.propertystore.base import PropertyName
-
 from txdav.base.propertystore.test import base
 
 try:
@@ -39,9 +37,8 @@
         tempDir.makedirs()
         tempFile = tempDir.child("test")
         tempFile.touch()
-        self.propertyStore = self.propertyStore1 = PropertyStore(
-            "user01", lambda : tempFile
-        )
+        self.propertyStore = PropertyStore("user01", lambda : tempFile)
+        self.propertyStore1 = self.propertyStore
         self.propertyStore2 = PropertyStore("user01", lambda : tempFile)
         self.propertyStore2._setPerUserUID("user02")
 
@@ -64,8 +61,8 @@
             name = "dummy"
 
         name = PropertyName.fromElement(DummyProperty)
-        compressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser))
-        uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser), compressNamespace=False)
+        compressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser))
+        uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser), compressNamespace=False)
 
         self.propertyStore[name] = DummyProperty.fromString("data")
         self.propertyStore.flush()
@@ -80,14 +77,10 @@
             name = "dummy"
 
         name = PropertyName.fromElement(DummyProperty)
-        uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultuser), compressNamespace=False)
+        uncompressedKey = self.propertyStore._encodeKey((name, self.propertyStore._defaultUser), compressNamespace=False)
         self.propertyStore.attrs[uncompressedKey] = DummyProperty.fromString("data").toxml()
         self.assertEqual(self.propertyStore[name], DummyProperty.fromString("data"))
-        self.assertRaises(KeyError, lambda:self.propertyStore.attrs[uncompressedKey])
+        self.assertRaises(KeyError, lambda: self.propertyStore.attrs[uncompressedKey])
 
 if PropertyStore is None:
     PropertyStoreTest.skip = importErrorMessage
-
-
-def propertyName(name):
-    return PropertyName("http://calendarserver.org/ns/test/", name)

Modified: CalendarServer/trunk/txdav/base/propertystore/xattr.py
===================================================================
--- CalendarServer/trunk/txdav/base/propertystore/xattr.py	2011-02-02 19:02:35 UTC (rev 6849)
+++ CalendarServer/trunk/txdav/base/propertystore/xattr.py	2011-02-02 19:07:05 UTC (rev 6850)
@@ -114,7 +114,7 @@
         qname, uid = effective
         namespace = self._namespaceCompress.get(qname.namespace, qname.namespace) if compressNamespace else qname.namespace
         result = urllib.quote("{%s}%s" % (namespace, qname.name), safe="{}:")
-        if uid and uid != self._defaultuser:
+        if uid and uid != self._defaultUser:
             result = uid + result
         r = self.deadPropertyXattrPrefix + result
         return r
@@ -129,7 +129,7 @@
         if (index1 is - 1 or index2 is - 1 or not len(name) > index2):
             raise ValueError("Invalid encoded name: %r" % (name,))
         if index1 == 0:
-            uid = self._defaultuser
+            uid = self._defaultUser
         else:
             uid = name[:index1]
         propnamespace = name[index1 + 1:index2]
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110202/2509a14f/attachment-0001.html>


More information about the calendarserver-changes mailing list