test_filenode.py : improve coverage of mutable filenode, fix a bug in __hash__

This commit is contained in:
Brian Warner 2008-03-04 14:01:28 -07:00
parent f6ca62df31
commit e6489b1ef2
2 changed files with 49 additions and 3 deletions

View File

@ -1580,13 +1580,13 @@ class MutableFileNode:
return self._uri.is_readonly()
def __hash__(self):
return hash((self.__class__, self.uri))
return hash((self.__class__, self._uri))
def __cmp__(self, them):
if cmp(type(self), type(them)):
return cmp(type(self), type(them))
if cmp(self.__class__, them.__class__):
return cmp(self.__class__, them.__class__)
return cmp(self.uri, them.uri)
return cmp(self._uri, them._uri)
def get_verifier(self):
return IMutableFileURI(self._uri).get_verifier()

View File

@ -1,6 +1,7 @@
from twisted.trial import unittest
from allmydata import filenode, uri, download
from allmydata import filenode, uri, download, mutable
from allmydata.util import hashutil
class NotANode:
pass
@ -57,3 +58,48 @@ class Node(unittest.TestCase):
d.addCallback(_check)
return d
def test_mutable_filenode(self):
client = None
wk = "\x00"*16
fp = "\x00"*32
rk = hashutil.ssk_readkey_hash(wk)
si = hashutil.ssk_storage_index_hash(rk)
u = uri.WriteableSSKFileURI("\x00"*16, "\x00"*32)
n = mutable.MutableFileNode(client).init_from_uri(u)
self.failUnlessEqual(n.get_writekey(), wk)
self.failUnlessEqual(n.get_readkey(), rk)
self.failUnlessEqual(n.get_storage_index(), si)
# these itmes are populated on first read (or create), so until that
# happens they'll be None
self.failUnlessEqual(n.get_privkey(), None)
self.failUnlessEqual(n.get_encprivkey(), None)
self.failUnlessEqual(n.get_pubkey(), None)
self.failUnlessEqual(n.get_uri(), u.to_string())
self.failUnlessEqual(n.get_readonly_uri(), u.get_readonly().to_string())
self.failUnlessEqual(n.is_mutable(), True)
self.failUnlessEqual(n.is_readonly(), False)
n2 = mutable.MutableFileNode(client).init_from_uri(u)
self.failUnlessEqual(n, n2)
self.failIfEqual(n, "not even the right type")
self.failIfEqual(n, u) # not the right class
d = {n: "can these be used as dictionary keys?"}
d[n2] = "replace the old one"
self.failUnlessEqual(len(d), 1)
nro = n.get_readonly()
self.failUnless(isinstance(nro, mutable.MutableFileNode))
self.failUnlessEqual(nro.get_readonly(), nro)
nro_u = nro.get_uri()
self.failUnlessEqual(nro_u, nro.get_readonly_uri())
self.failUnlessEqual(nro_u, u.get_readonly().to_string())
self.failUnlessEqual(nro.is_mutable(), True)
self.failUnlessEqual(nro.is_readonly(), True)
v = n.get_verifier()
self.failUnless(isinstance(v, uri.SSKVerifierURI))