From e6489b1ef26d616cc682da0ddf3acc27156e7a64 Mon Sep 17 00:00:00 2001 From: Brian Warner Date: Tue, 4 Mar 2008 14:01:28 -0700 Subject: [PATCH] test_filenode.py : improve coverage of mutable filenode, fix a bug in __hash__ --- src/allmydata/mutable.py | 4 +-- src/allmydata/test/test_filenode.py | 48 ++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/src/allmydata/mutable.py b/src/allmydata/mutable.py index 20d1bb8d..925a286a 100644 --- a/src/allmydata/mutable.py +++ b/src/allmydata/mutable.py @@ -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() diff --git a/src/allmydata/test/test_filenode.py b/src/allmydata/test/test_filenode.py index 9929b778..46300df8 100644 --- a/src/allmydata/test/test_filenode.py +++ b/src/allmydata/test/test_filenode.py @@ -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)) + -- 2.45.2