Commit 80051d9e authored by Jim Fulton's avatar Jim Fulton

Fixed a number of tests. The tests didn't recognize that when an

object hasn't been modified in a version, we fall back to non-version
data.

There are a couple of places where the spec was unclear and I punted
for now.
parent 10f21335
...@@ -34,9 +34,12 @@ class VersionStorage: ...@@ -34,9 +34,12 @@ class VersionStorage:
self._storage.load, self._storage.load,
self._storage.new_oid(), '') self._storage.new_oid(), '')
# Try to load a bogus version string # Try to load a bogus version string
self.assertRaises(POSException.VersionError, #JF# Nope, fall back to non-version
self._storage.load, #JF# self.assertRaises(KeyError,
oid, 'bogus') #JF# self._storage.load,
#JF# oid, 'bogus')
data, revid = self._storage.load(oid, 'bogus')
assert pickle.loads(data) == 11
def checkVersionLock(self): def checkVersionLock(self):
...@@ -52,7 +55,9 @@ class VersionStorage: ...@@ -52,7 +55,9 @@ class VersionStorage:
def checkVersionEmpty(self): def checkVersionEmpty(self):
# Before we store anything, these versions ought to be empty # Before we store anything, these versions ought to be empty
version = 'test-version' version = 'test-version'
assert self._storage.versionEmpty('') #JF# The empty string is not a valid version. I think that this should
#JF# be an error. Let's punt for now.
#JF# assert self._storage.versionEmpty('')
assert self._storage.versionEmpty(version) assert self._storage.versionEmpty(version)
# Now store some objects # Now store some objects
oid = self._storage.new_oid() oid = self._storage.new_oid()
...@@ -61,7 +66,10 @@ class VersionStorage: ...@@ -61,7 +66,10 @@ class VersionStorage:
revid = self._dostore(oid, revid=revid, data=13, version=version) revid = self._dostore(oid, revid=revid, data=13, version=version)
revid = self._dostore(oid, revid=revid, data=14, version=version) revid = self._dostore(oid, revid=revid, data=14, version=version)
# The blank version should not be empty # The blank version should not be empty
assert not self._storage.versionEmpty('') #JF# The empty string is not a valid version. I think that this should
#JF# be an error. Let's punt for now.
#JF# assert not self._storage.versionEmpty('')
# Neither should 'test-version' # Neither should 'test-version'
assert not self._storage.versionEmpty(version) assert not self._storage.versionEmpty(version)
# But this non-existant version should be empty # But this non-existant version should be empty
...@@ -117,11 +125,16 @@ class VersionStorage: ...@@ -117,11 +125,16 @@ class VersionStorage:
oid, version = self._setup_version() oid, version = self._setup_version()
# Now abort a bogus version # Now abort a bogus version
self._storage.tpc_begin(self._transaction) self._storage.tpc_begin(self._transaction)
self.assertRaises(KeyError,
self._storage.abortVersion, #JF# The spec is silent on what happens if you abort or commit
'bogus', self._transaction) #JF# a non-existent version. FileStorage consideres this a noop.
#JF# We can change the spec, but until we do ....
#JF# self.assertRaises(POSException.VersionError,
#JF# self._storage.abortVersion,
#JF# 'bogus', self._transaction)
# And try to abort the empty version # And try to abort the empty version
self.assertRaises(KeyError, self.assertRaises(POSException.VersionError,
self._storage.abortVersion, self._storage.abortVersion,
'', self._transaction) '', self._transaction)
# But now we really try to abort the version # But now we really try to abort the version
...@@ -172,8 +185,13 @@ class VersionStorage: ...@@ -172,8 +185,13 @@ class VersionStorage:
data, revid2 = self._storage.load(oid2, version2) data, revid2 = self._storage.load(oid2, version2)
assert pickle.loads(data) == 54 assert pickle.loads(data) == 54
# Let's make sure we can't get object1 in version2 # Let's make sure we can't get object1 in version2
self.assertRaises(POSException.VersionError, #JF# This won't fail because we fall back to non-version data.
self._storage.load, oid1, version2) #JF# In fact, it must succed and give us 51
#JF# self.assertRaises(POSException.VersionError,
#JF# self._storage.load, oid1, version2)
data, revid2 = self._storage.load(oid1, version2)
assert pickle.loads(data) == 51
# Okay, now let's commit object1 to version2 # Okay, now let's commit object1 to version2
self._storage.tpc_begin(self._transaction) self._storage.tpc_begin(self._transaction)
oids = self._storage.commitVersion(version1, version2, oids = self._storage.commitVersion(version1, version2,
...@@ -186,8 +204,11 @@ class VersionStorage: ...@@ -186,8 +204,11 @@ class VersionStorage:
assert pickle.loads(data) == 54 assert pickle.loads(data) == 54
data, revid = self._storage.load(oid2, version2) data, revid = self._storage.load(oid2, version2)
assert pickle.loads(data) == 54 assert pickle.loads(data) == 54
self.assertRaises(POSException.VersionError, #JF# Ditto, sort of
self._storage.load, oid1, version1) #JF# self.assertRaises(POSException.VersionError,
#JF# self._storage.load, oid1, version1)
data, revid2 = self._storage.load(oid1, version1)
assert pickle.loads(data) == 51
def checkAbortOneVersionCommitTheOther(self): def checkAbortOneVersionCommitTheOther(self):
oid1, version1 = self._setup_version('one') oid1, version1 = self._setup_version('one')
...@@ -197,8 +218,15 @@ class VersionStorage: ...@@ -197,8 +218,15 @@ class VersionStorage:
data, revid2 = self._storage.load(oid2, version2) data, revid2 = self._storage.load(oid2, version2)
assert pickle.loads(data) == 54 assert pickle.loads(data) == 54
# Let's make sure we can't get object1 in version2 # Let's make sure we can't get object1 in version2
self.assertRaises(POSException.VersionError,
self._storage.load, oid1, version2) #JF# It's not an error to load data in a different version when data
#JF# are stored in non-version. See above
#JF#
#JF# self.assertRaises(POSException.VersionError,
#JF# self._storage.load, oid1, version2)
data, revid2 = self._storage.load(oid1, version2)
assert pickle.loads(data) == 51
# First, let's abort version1 # First, let's abort version1
self._storage.tpc_begin(self._transaction) self._storage.tpc_begin(self._transaction)
oids = self._storage.abortVersion(version1, self._transaction) oids = self._storage.abortVersion(version1, self._transaction)
...@@ -208,10 +236,17 @@ class VersionStorage: ...@@ -208,10 +236,17 @@ class VersionStorage:
assert oids[0] == oid1 assert oids[0] == oid1
data, revid = self._storage.load(oid1, '') data, revid = self._storage.load(oid1, '')
assert pickle.loads(data) == 51 assert pickle.loads(data) == 51
self.assertRaises(POSException.VersionError,
self._storage.load, oid1, version1) #JF# Ditto
self.assertRaises(POSException.VersionError, #JF# self.assertRaises(POSException.VersionError,
self._storage.load, oid1, version2) #JF# self._storage.load, oid1, version1)
data, revid = self._storage.load(oid1, '')
assert pickle.loads(data) == 51
#JF# self.assertRaises(POSException.VersionError,
#JF# self._storage.load, oid1, version2)
data, revid = self._storage.load(oid1, '')
assert pickle.loads(data) == 51
data, revid = self._storage.load(oid2, '') data, revid = self._storage.load(oid2, '')
assert pickle.loads(data) == 51 assert pickle.loads(data) == 51
data, revid = self._storage.load(oid2, version2) data, revid = self._storage.load(oid2, version2)
...@@ -224,10 +259,24 @@ class VersionStorage: ...@@ -224,10 +259,24 @@ class VersionStorage:
assert len(oids) == 1 assert len(oids) == 1
assert oids[0] == oid2 assert oids[0] == oid2
# These objects should not be found in version 2 # These objects should not be found in version 2
self.assertRaises(POSException.VersionError, #JF# Ditto
self._storage.load, oid1, version2) #JF# self.assertRaises(POSException.VersionError,
self.assertRaises(POSException.VersionError, #JF# self._storage.load, oid1, version2)
self._storage.load, oid2, version2) data, revid = self._storage.load(oid1, '')
assert pickle.loads(data) == 51
#JF# self.assertRaises(POSException.VersionError,
#JF# self._storage.load, oid2, version2)
# But the trunk should be up to date now # But the trunk should be up to date now
data, revid = self._storage.load(oid2, version2)
assert pickle.loads(data) == 54
data, revid = self._storage.load(oid2, '') data, revid = self._storage.load(oid2, '')
assert pickle.loads(data) == 54 assert pickle.loads(data) == 54
#JF# To do a test like you want, you have to add the data in a version
oid = self._storage.new_oid()
revid = self._dostore(oid, revid=revid, data=54, version='one')
self.assertRaises(KeyError,
self._storage.load, oid, '')
self.assertRaises(KeyError,
self._storage.load, oid, 'two')
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment