Changeset f47672d in trunk for src/allmydata
- Timestamp:
- 2009-11-04T18:13:51Z (16 years ago)
- Branches:
- master
- Children:
- 131e05b
- Parents:
- 9733201
- git-author:
- Brian Warner <warner@…> (2009-11-04 17:24:53)
- git-committer:
- Brian Warner <warner@…> (2009-11-04 18:13:51)
- Location:
- src/allmydata
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
TabularUnified src/allmydata/test/test_uri.py ¶
r9733201 rf47672d 332 332 self.failUnlessEqual(v._filenode_uri, 333 333 u1.get_verify_cap()._filenode_uri) 334 335 def test_immutable(self): 336 readkey = "\x01" * 16 337 uri_extension_hash = hashutil.uri_extension_hash("stuff") 338 needed_shares = 3 339 total_shares = 10 340 size = 1234 341 342 fnuri = uri.CHKFileURI(key=readkey, 343 uri_extension_hash=uri_extension_hash, 344 needed_shares=needed_shares, 345 total_shares=total_shares, 346 size=size) 347 fncap = fnuri.to_string() 348 self.failUnlessEqual(fncap, "URI:CHK:aeaqcaibaeaqcaibaeaqcaibae:nf3nimquen7aeqm36ekgxomalstenpkvsdmf6fplj7swdatbv5oa:3:10:1234") 349 u1 = uri.ImmutableDirectoryURI(fnuri) 350 self.failUnless(u1.is_readonly()) 351 self.failIf(u1.is_mutable()) 352 self.failUnless(IURI.providedBy(u1)) 353 self.failIf(IFileURI.providedBy(u1)) 354 self.failUnless(IDirnodeURI.providedBy(u1)) 355 self.failUnless("DirectoryURI" in str(u1)) 356 u1_filenode = u1.get_filenode_uri() 357 self.failIf(u1_filenode.is_mutable()) 358 self.failUnless(u1_filenode.is_readonly()) 359 self.failUnlessEqual(u1_filenode.to_string(), fncap) 360 self.failUnless(str(u1)) 361 362 u2 = uri.from_string(u1.to_string()) 363 self.failUnlessEqual(u1.to_string(), u2.to_string()) 364 self.failUnless(u2.is_readonly()) 365 self.failIf(u2.is_mutable()) 366 self.failUnless(IURI.providedBy(u2)) 367 self.failIf(IFileURI.providedBy(u2)) 368 self.failUnless(IDirnodeURI.providedBy(u2)) 369 370 u3 = u2.get_readonly() 371 self.failUnlessEqual(u3.to_string(), u2.to_string()) 372 self.failUnless(str(u3)) 373 374 u2_verifier = u2.get_verify_cap() 375 self.failUnless(isinstance(u2_verifier, 376 uri.ImmutableDirectoryURIVerifier), u2_verifier) 377 self.failUnless(IVerifierURI.providedBy(u2_verifier)) 378 u2_verifier_fileuri = u2_verifier.get_filenode_uri() 379 self.failUnless(IVerifierURI.providedBy(u2_verifier_fileuri)) 380 self.failUnlessEqual(u2_verifier_fileuri.to_string(), 381 fnuri.get_verify_cap().to_string()) 382 self.failUnless(str(u2_verifier)) 383 384 def test_literal(self): 385 u1 = uri.LiteralDirectoryURI("data") 386 self.failUnless(str(u1)) 387 u1s = u1.to_string() 388 self.failUnlessEqual(u1.to_string(), "URI:DIR2-LIT:mrqxiyi") 389 self.failUnless(u1.is_readonly()) 390 self.failIf(u1.is_mutable()) 391 self.failUnless(IURI.providedBy(u1)) 392 self.failIf(IFileURI.providedBy(u1)) 393 self.failUnless(IDirnodeURI.providedBy(u1)) 394 self.failUnlessEqual(u1.get_verify_cap(), None) -
TabularUnified src/allmydata/uri.py ¶
r9733201 rf47672d 49 49 implements(IURI, IImmutableFileURI) 50 50 51 BASE_STRING='URI:CHK:' 51 52 STRING_RE=re.compile('^URI:CHK:'+BASE32STR_128bits+':'+ 52 53 BASE32STR_256bits+':'+NUMBER+':'+NUMBER+':'+NUMBER+ … … 160 161 implements(IURI, IImmutableFileURI) 161 162 163 BASE_STRING='URI:LIT:' 162 164 STRING_RE=re.compile('^URI:LIT:'+base32.BASE32STR_anybytes+'$') 163 165 HUMAN_RE=re.compile('^'+OPTIONALHTTPLEAD+'URI'+SEP+'LIT'+SEP+base32.BASE32STR_anybytes+'$') … … 423 425 return self 424 426 427 class _ImmutableDirectoryBaseURI(_DirectoryBaseURI): 428 def __init__(self, filenode_uri=None): 429 if filenode_uri: 430 assert isinstance(filenode_uri, self.INNER_URI_CLASS), filenode_uri 431 _DirectoryBaseURI.__init__(self, filenode_uri) 432 433 def is_mutable(self): 434 return False 435 436 def is_readonly(self): 437 return True 438 439 def get_readonly(self): 440 return self 441 442 class ImmutableDirectoryURI(_ImmutableDirectoryBaseURI): 443 BASE_STRING='URI:DIR2-CHK:' 444 BASE_STRING_RE=re.compile('^'+BASE_STRING) 445 BASE_HUMAN_RE=re.compile('^'+OPTIONALHTTPLEAD+'URI'+SEP+'DIR2-CHK'+SEP) 446 INNER_URI_CLASS=CHKFileURI 447 def get_verify_cap(self): 448 vcap = self._filenode_uri.get_verify_cap() 449 return ImmutableDirectoryURIVerifier(vcap) 450 451 452 class LiteralDirectoryURI(_ImmutableDirectoryBaseURI): 453 BASE_STRING='URI:DIR2-LIT:' 454 BASE_STRING_RE=re.compile('^'+BASE_STRING) 455 BASE_HUMAN_RE=re.compile('^'+OPTIONALHTTPLEAD+'URI'+SEP+'DIR2-LIT'+SEP) 456 INNER_URI_CLASS=LiteralFileURI 457 def __init__(self, data=None): 458 filenode_uri = LiteralFileURI(data) 459 _ImmutableDirectoryBaseURI.__init__(self, filenode_uri) 460 def get_verify_cap(self): 461 # LIT caps have no verifier, since they aren't distributed 462 return None 463 464 425 465 class DirectoryURIVerifier(_DirectoryBaseURI): 426 466 implements(IVerifierURI) … … 438 478 def get_filenode_uri(self): 439 479 return self._filenode_uri 480 481 class ImmutableDirectoryURIVerifier(DirectoryURIVerifier): 482 implements(IVerifierURI) 483 BASE_STRING='URI:DIR2-CHK-Verifier:' 484 BASE_STRING_RE=re.compile('^'+BASE_STRING) 485 BASE_HUMAN_RE=re.compile('^'+OPTIONALHTTPLEAD+'URI'+SEP+'DIR2-CHK-VERIFIER'+SEP) 486 INNER_URI_CLASS=CHKFileVerifierURI 440 487 441 488 class UnknownURI: … … 466 513 elif s.startswith('URI:DIR2-Verifier:'): 467 514 return DirectoryURIVerifier.init_from_string(s) 515 elif s.startswith('URI:DIR2-CHK:'): 516 return ImmutableDirectoryURI.init_from_string(s) 517 elif s.startswith('URI:DIR2-LIT:'): 518 return LiteralDirectoryURI.init_from_string(s) 468 519 return UnknownURI(s) 469 520
Note: See TracChangeset
for help on using the changeset viewer.