Пример #1
0
 def create_mutable_file(self, contents=None, keysize=None):
     n = MutableFileNode(self.storage_broker, self.secret_holder,
                         self.default_encoding_parameters, self.history)
     d = self.key_generator.generate(keysize)
     d.addCallback(n.create_with_keys, contents)
     d.addCallback(lambda res: n)
     return d
Пример #2
0
 def test_mutable_filenode_equality(self):
     client = FakeClient()
     u = uri.WriteableSSKFileURI(b"\x00" * 16, b"\x00" * 32)
     n = MutableFileNode(None, None, client.get_encoding_parameters(),
                         None).init_from_cap(u)
     u2 = uri.WriteableSSKFileURI(b"\x01" * 16, b"\x01" * 32)
     n2 = MutableFileNode(None, None, client.get_encoding_parameters(),
                          None).init_from_cap(u2)
     n2b = MutableFileNode(None, None, client.get_encoding_parameters(),
                           None).init_from_cap(u2)
     self.assertTrue(n2 == n2b)
     self.assertFalse(n2 != n2b)
     self.assertTrue(n2 != n)
     self.assertTrue(n != n2)
     self.assertFalse(n == n2)
     self.assertTrue(n != 3)
     self.assertFalse(n == 3)
Пример #3
0
    def test_serialize(self):
        n = MutableFileNode(None, None, {"k": 3, "n": 10}, None)
        calls = []
        def _callback(*args, **kwargs):
            self.failUnlessEqual(args, (4,) )
            self.failUnlessEqual(kwargs, {"foo": 5})
            calls.append(1)
            return 6
        d = n._do_serialized(_callback, 4, foo=5)
        def _check_callback(res):
            self.failUnlessEqual(res, 6)
            self.failUnlessEqual(calls, [1])
        d.addCallback(_check_callback)

        def _errback():
            raise ValueError("heya")
        d.addCallback(lambda res:
                      self.shouldFail(ValueError, "_check_errback", "heya",
                                      n._do_serialized, _errback))
        return d
Пример #4
0
    def test_serialize(self):
        n = MutableFileNode(None, None, {"k": 3, "n": 10}, None)
        calls = []
        def _callback(*args, **kwargs):
            self.failUnlessEqual(args, (4,) )
            self.failUnlessEqual(kwargs, {"foo": 5})
            calls.append(1)
            return 6
        d = n._do_serialized(_callback, 4, foo=5)
        def _check_callback(res):
            self.failUnlessEqual(res, 6)
            self.failUnlessEqual(calls, [1])
        d.addCallback(_check_callback)

        def _errback():
            raise ValueError("heya")
        d.addCallback(lambda res:
                      self.shouldFail(ValueError, "_check_errback", "heya",
                                      n._do_serialized, _errback))
        return d
Пример #5
0
 def random_fsnode(self):
     coin = random.randrange(0, 3)
     if coin == 0:
         cap = uri.CHKFileURI(randutil.insecurerandstr(16),
                              randutil.insecurerandstr(32),
                              random.randrange(1, 5),
                              random.randrange(6, 15),
                              random.randrange(99, 1000000000000))
         return ImmutableFileNode(cap, None, None, None, None, None)
     elif coin == 1:
         cap = uri.WriteableSSKFileURI(randutil.insecurerandstr(16),
                                       randutil.insecurerandstr(32))
         n = MutableFileNode(None, None, encoding_parameters, None)
         return n.init_from_cap(cap)
     else:
         assert coin == 2
         cap = uri.WriteableSSKFileURI(randutil.insecurerandstr(16),
                                       randutil.insecurerandstr(32))
         n = MutableFileNode(None, None, encoding_parameters, None)
         n.init_from_cap(cap)
         return dirnode.DirectoryNode(n, self.nodemaker, uploader=None)
Пример #6
0
    def test_mutable_filenode(self):
        client = FakeClient()
        wk = "\x00" * 16
        rk = hashutil.ssk_readkey_hash(wk)
        si = hashutil.ssk_storage_index_hash(rk)

        u = uri.WriteableSSKFileURI("\x00" * 16, "\x00" * 32)
        n = MutableFileNode(None, None, client.get_encoding_parameters(),
                            None).init_from_cap(u)

        self.failUnlessEqual(n.get_writekey(), wk)
        self.failUnlessEqual(n.get_readkey(), rk)
        self.failUnlessEqual(n.get_storage_index(), si)
        # these items 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_write_uri(), u.to_string())
        self.failUnlessEqual(n.get_readonly_uri(),
                             u.get_readonly().to_string())
        self.failUnlessEqual(n.get_cap(), u)
        self.failUnlessEqual(n.get_readcap(), u.get_readonly())
        self.failUnless(n.is_mutable())
        self.failIf(n.is_readonly())
        self.failIf(n.is_unknown())
        self.failIf(n.is_allowed_in_immutable_directory())
        n.raise_error()

        n2 = MutableFileNode(None, None, client.get_encoding_parameters(),
                             None).init_from_cap(u)
        self.failUnlessEqual(n, n2)
        self.failIfEqual(n, "not even the right type")
        self.failIfEqual(n, u)  # not the right class
        n.raise_error()
        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, MutableFileNode))

        self.failUnlessEqual(nro.get_readonly(), nro)
        self.failUnlessEqual(nro.get_cap(), u.get_readonly())
        self.failUnlessEqual(nro.get_readcap(), u.get_readonly())
        self.failUnless(nro.is_mutable())
        self.failUnless(nro.is_readonly())
        self.failIf(nro.is_unknown())
        self.failIf(nro.is_allowed_in_immutable_directory())
        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.get_write_uri(), None)
        self.failUnlessEqual(nro.get_repair_cap(),
                             None)  # RSAmut needs writecap
        nro.raise_error()

        v = n.get_verify_cap()
        self.failUnless(isinstance(v, uri.SSKVerifierURI))
        self.failUnlessEqual(n.get_repair_cap(), n._uri)  # TODO: n.get_uri()
Пример #7
0
 def _create_mutable(self, cap):
     n = MutableFileNode(self.storage_broker, self.secret_holder,
                         self.default_encoding_parameters,
                         self.history)
     return n.init_from_cap(cap)
Пример #8
0
 def _create_mutable(self, cap):
     n = MutableFileNode(self.storage_broker, self.secret_holder,
                         self.default_encoding_parameters, self.history)
     return n.init_from_cap(cap)
Пример #9
0
    def test_mutable_filenode(self):
        client = FakeClient()
        wk = "\x00"*16
        rk = hashutil.ssk_readkey_hash(wk)
        si = hashutil.ssk_storage_index_hash(rk)

        u = uri.WriteableSSKFileURI("\x00"*16, "\x00"*32)
        n = MutableFileNode(None, None, client.get_encoding_parameters(),
                            None).init_from_cap(u)

        self.failUnlessEqual(n.get_writekey(), wk)
        self.failUnlessEqual(n.get_readkey(), rk)
        self.failUnlessEqual(n.get_storage_index(), si)
        # these items 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_write_uri(), u.to_string())
        self.failUnlessEqual(n.get_readonly_uri(), u.get_readonly().to_string())
        self.failUnlessEqual(n.get_cap(), u)
        self.failUnlessEqual(n.get_readcap(), u.get_readonly())
        self.failUnless(n.is_mutable())
        self.failIf(n.is_readonly())
        self.failIf(n.is_unknown())
        self.failIf(n.is_allowed_in_immutable_directory())
        n.raise_error()

        n2 = MutableFileNode(None, None, client.get_encoding_parameters(),
                             None).init_from_cap(u)
        self.failUnlessEqual(n, n2)
        self.failIfEqual(n, "not even the right type")
        self.failIfEqual(n, u) # not the right class
        n.raise_error()
        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, MutableFileNode))

        self.failUnlessEqual(nro.get_readonly(), nro)
        self.failUnlessEqual(nro.get_cap(), u.get_readonly())
        self.failUnlessEqual(nro.get_readcap(), u.get_readonly())
        self.failUnless(nro.is_mutable())
        self.failUnless(nro.is_readonly())
        self.failIf(nro.is_unknown())
        self.failIf(nro.is_allowed_in_immutable_directory())
        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.get_write_uri(), None)
        self.failUnlessEqual(nro.get_repair_cap(), None) # RSAmut needs writecap
        nro.raise_error()

        v = n.get_verify_cap()
        self.failUnless(isinstance(v, uri.SSKVerifierURI))
        self.failUnlessEqual(n.get_repair_cap(), n._uri) # TODO: n.get_uri()