From 311ed144f89d47437587d3ca759d8d23e85a1f99 Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Mon, 17 Sep 2007 01:09:47 -0700
Subject: [PATCH] uri.py: improve test coverage a bit

---
 src/allmydata/test/test_uri.py | 36 ++++++++++++++++++++++++++++++++++
 src/allmydata/uri.py           |  2 +-
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/src/allmydata/test/test_uri.py b/src/allmydata/test/test_uri.py
index 18a322ed..e4bd4b24 100644
--- a/src/allmydata/test/test_uri.py
+++ b/src/allmydata/test/test_uri.py
@@ -37,6 +37,19 @@ class Literal(unittest.TestCase):
         data = "This contains \x00 and URI:LIT: and \n, oh my."
         return self._help_test(data)
 
+class Compare(unittest.TestCase):
+    def test_compare(self):
+        lit1 = uri.LiteralFileURI("some data")
+        fileURI = 'URI:CHK:f3mf6az85wpcai8ma4qayfmxuc:nnw518w5hu3t5oohwtp7ah9n81z9rfg6c1ywk33ia3m64o67nsgo:3:10:345834'
+        chk1 = uri.CHKFileURI().init_from_string(fileURI)
+        chk2 = uri.CHKFileURI().init_from_string(fileURI)
+        self.failIfEqual(lit1, chk1)
+        self.failUnlessEqual(chk1, chk2)
+        self.failIfEqual(chk1, "not actually a URI")
+        # these should be hashable too
+        s = set([lit1, chk1, chk2])
+        self.failUnlessEqual(len(s), 2) # since chk1==chk2
+
 class CHKFile(unittest.TestCase):
     def test_pack(self):
         key = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
@@ -81,6 +94,24 @@ class CHKFile(unittest.TestCase):
         self.failUnless(u2.is_readonly())
         self.failIf(u2.is_mutable())
 
+    def test_pack_badly(self):
+        key = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f"
+        storage_index = hashutil.storage_index_chk_hash(key)
+        uri_extension_hash = hashutil.uri_extension_hash("stuff")
+        needed_shares = 25
+        total_shares = 100
+        size = 1234
+        self.failUnlessRaises(TypeError,
+                              uri.CHKFileURI,
+                              key=key,
+                              uri_extension_hash=uri_extension_hash,
+                              needed_shares=needed_shares,
+                              total_shares=total_shares,
+                              size=size,
+
+                              bogus_extra_argument="reject me",
+                              )
+
 class Extension(unittest.TestCase):
     def test_pack(self):
         data = {"stuff": "value",
@@ -138,6 +169,11 @@ class Dirnode(unittest.TestCase):
         self.failIf(IFileURI.providedBy(u4))
         self.failUnless(IDirnodeURI.providedBy(u4))
 
+class Invalid(unittest.TestCase):
+    def test_create_invalid(self):
+        not_uri = "I am not a URI"
+        self.failUnlessRaises(TypeError, uri.from_string, not_uri)
+
 
 class Constraint(unittest.TestCase):
     def test_constraint(self):
diff --git a/src/allmydata/uri.py b/src/allmydata/uri.py
index 72aece89..a035c951 100644
--- a/src/allmydata/uri.py
+++ b/src/allmydata/uri.py
@@ -202,7 +202,7 @@ def from_string(s):
     elif s.startswith("URI:DIR-RO:"):
         return ReadOnlyDirnodeURI().init_from_string(s)
     else:
-        raise RuntimeError("unknown URI type: %s.." % s[:10])
+        raise TypeError("unknown URI type: %s.." % s[:10])
 
 registerAdapter(from_string, str, IURI)
 
-- 
2.45.2