From 33bae16ed2b543e3fa40eb4a18889a2b9cadc463 Mon Sep 17 00:00:00 2001
From: wilcoxjg <wilcoxjg@gmail.com>
Date: Tue, 28 Aug 2007 23:28:26 -0700
Subject: [PATCH] created DirnodeURI schema

---
 src/allmydata/interfaces.py    |  3 ++-
 src/allmydata/test/test_uri.py | 14 +++++++++++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/allmydata/interfaces.py b/src/allmydata/interfaces.py
index 2fb60e9a..e2edc242 100644
--- a/src/allmydata/interfaces.py
+++ b/src/allmydata/interfaces.py
@@ -13,6 +13,7 @@ Nodeid = StringConstraint(maxLength=20,
 FURL = StringConstraint(1000)
 StorageIndex = StringConstraint(16)
 URI = StringConstraint(300) # kind of arbitrary
+DirnodeURI = StringConstraint(300, regexp=r'^URI:DIR(-RO)?:pb://[a-z0-9]+@[^/]+/[^:]+:[a-z0-9]+$')
 MAX_BUCKETS = 200  # per peer
 ShareData = StringConstraint(400000) # 1MB segment / k=3 = 334kB
 URIExtensionData = StringConstraint(1000)
@@ -228,7 +229,7 @@ class RIVirtualDriveServer(RemoteInterface):
 
         If this vdrive server does not offer a public root, this will
         raise an exception."""
-        return URI
+        return DirnodeURI
 
     def create_directory(index=Hash, write_enabler=Hash):
         """Create a new (empty) directory, unattached to anything else.
diff --git a/src/allmydata/test/test_uri.py b/src/allmydata/test/test_uri.py
index 835d4f2a..b0b8fa52 100644
--- a/src/allmydata/test/test_uri.py
+++ b/src/allmydata/test/test_uri.py
@@ -2,7 +2,8 @@
 from twisted.trial import unittest
 from allmydata import uri
 from allmydata.util import hashutil
-from allmydata.interfaces import IURI, IFileURI, IDirnodeURI
+from allmydata.interfaces import IURI, IFileURI, IDirnodeURI, DirnodeURI
+from foolscap.schema import Violation
 
 class Literal(unittest.TestCase):
     def _help_test(self, data):
@@ -137,3 +138,14 @@ class Dirnode(unittest.TestCase):
         self.failIf(IFileURI.providedBy(u4))
         self.failUnless(IDirnodeURI.providedBy(u4))
 
+
+class Constraint(unittest.TestCase):
+    def test_constraint(self):
+       good = 'URI:DIR:pb://xextf3eap44o3wi27mf7ehiur6wvhzr6@207.7.153.180:56677,127.0.0.1:56677/vdrive:qj51rfpnukhjmo7cm9awe5ks5e'
+       DirnodeURI.checkObject(good, False)
+       bad = good + '==='
+       self.failUnlessRaises(Violation, DirnodeURI.checkObject, bad, False)
+       fileURI = 'URI:CHK:f3mf6az85wpcai8ma4qayfmxuc:nnw518w5hu3t5oohwtp7ah9n81z9rfg6c1ywk33ia3m64o67nsgo:3:10:345834'
+       self.failUnlessRaises(Violation, DirnodeURI.checkObject, fileURI, False)
+
+ 
-- 
2.45.2