Ticket #1643: 1643.diff

File 1643.diff, 10.2 KB (added by warner, at 2013-04-12T19:47:30Z)

patch to only check dirnode-ness of the aliases that get used

  • src/allmydata/scripts/common.py

    diff --git a/src/allmydata/scripts/common.py b/src/allmydata/scripts/common.py
    index 27ea9af..bd78430 100644
    a b DEFAULT_ALIAS = u"tahoe" 
    7272
    7373
    7474def get_aliases(nodedir):
    75     from allmydata import uri
    7675    aliases = {}
    7776    aliasfile = os.path.join(nodedir, "private", "aliases")
    7877    rootfile = os.path.join(nodedir, "private", "root_dir.cap")
    def get_aliases(nodedir): 
    8079        f = open(rootfile, "r")
    8180        rootcap = f.read().strip()
    8281        if rootcap:
    83             aliases[DEFAULT_ALIAS] = uri.from_string_dirnode(rootcap).to_string()
     82            aliases[DEFAULT_ALIAS] = rootcap
    8483    except EnvironmentError:
    8584        pass
    8685    try:
    def get_aliases(nodedir): 
    9291            name, cap = line.split(u":", 1)
    9392            # normalize it: remove http: prefix, urldecode
    9493            cap = cap.strip().encode('utf-8')
    95             aliases[name] = uri.from_string_dirnode(cap).to_string()
     94            aliases[name] = cap
    9695    except EnvironmentError:
    9796        pass
    9897    return aliases
    def get_alias(aliases, path_unicode, default): 
    158157            raise UnknownAliasError("No alias specified, and the default %s alias doesn't exist. "
    159158                                    "To create it, use 'tahoe create-alias %s'."
    160159                                    % (quote_output(default), quote_output(default, quotemarks=False)))
    161         return aliases[default], path
     160        return uri.from_string_dirnode(aliases[default]).to_string(), path
    162161    if colon == 1 and default is None and platform_uses_lettercolon_drivename():
    163162        # treat C:\why\must\windows\be\so\weird as a local path, not a tahoe
    164163        # file in the "C:" alias
    def get_alias(aliases, path_unicode, default): 
    175174            raise UnknownAliasError("No alias specified, and the default %s alias doesn't exist. "
    176175                                    "To create it, use 'tahoe create-alias %s'."
    177176                                    % (quote_output(default), quote_output(default, quotemarks=False)))
    178         return aliases[default], path
     177        return uri.from_string_dirnode(aliases[default]).to_string(), path
    179178    if alias not in aliases:
    180179        raise UnknownAliasError("Unknown alias %s, please create it with 'tahoe add-alias' or 'tahoe create-alias'." %
    181180                                quote_output(alias))
    182     return aliases[alias], path[colon+1:]
     181    return uri.from_string_dirnode(aliases[alias]).to_string(), path[colon+1:]
    183182
    184183def escape_path(path):
    185184    segments = path.split("/")
  • src/allmydata/test/test_cli.py

    diff --git a/src/allmydata/test/test_cli.py b/src/allmydata/test/test_cli.py
    index 658d3ce..0c06d18 100644
    a b class CLI(CLITestMixin, unittest.TestCase): 
    397397                        "didn't see 'mqfblse6m5a6dh45isu2cg7oji' in '%s'" % err)
    398398
    399399    def test_alias(self):
    400         aliases = {"tahoe": "TA",
    401                    "work": "WA",
    402                    "c": "CA"}
     400        def s128(c): return base32.b2a(c*(128/8))
     401        def s256(c): return base32.b2a(c*(256/8))
     402        TA = "URI:DIR2:%s:%s" % (s128("T"), s256("T"))
     403        WA = "URI:DIR2:%s:%s" % (s128("W"), s256("W"))
     404        CA = "URI:DIR2:%s:%s" % (s128("C"), s256("C"))
     405        aliases = {"tahoe": TA,
     406                   "work": WA,
     407                   "c": CA}
    403408        def ga1(path):
    404409            return get_alias(aliases, path, u"tahoe")
    405410        uses_lettercolon = common.platform_uses_lettercolon_drivename()
    406         self.failUnlessReallyEqual(ga1(u"bare"), ("TA", "bare"))
    407         self.failUnlessReallyEqual(ga1(u"baredir/file"), ("TA", "baredir/file"))
    408         self.failUnlessReallyEqual(ga1(u"baredir/file:7"), ("TA", "baredir/file:7"))
    409         self.failUnlessReallyEqual(ga1(u"tahoe:"), ("TA", ""))
    410         self.failUnlessReallyEqual(ga1(u"tahoe:file"), ("TA", "file"))
    411         self.failUnlessReallyEqual(ga1(u"tahoe:dir/file"), ("TA", "dir/file"))
    412         self.failUnlessReallyEqual(ga1(u"work:"), ("WA", ""))
    413         self.failUnlessReallyEqual(ga1(u"work:file"), ("WA", "file"))
    414         self.failUnlessReallyEqual(ga1(u"work:dir/file"), ("WA", "dir/file"))
     411        self.failUnlessReallyEqual(ga1(u"bare"), (TA, "bare"))
     412        self.failUnlessReallyEqual(ga1(u"baredir/file"), (TA, "baredir/file"))
     413        self.failUnlessReallyEqual(ga1(u"baredir/file:7"), (TA, "baredir/file:7"))
     414        self.failUnlessReallyEqual(ga1(u"tahoe:"), (TA, ""))
     415        self.failUnlessReallyEqual(ga1(u"tahoe:file"), (TA, "file"))
     416        self.failUnlessReallyEqual(ga1(u"tahoe:dir/file"), (TA, "dir/file"))
     417        self.failUnlessReallyEqual(ga1(u"work:"), (WA, ""))
     418        self.failUnlessReallyEqual(ga1(u"work:file"), (WA, "file"))
     419        self.failUnlessReallyEqual(ga1(u"work:dir/file"), (WA, "dir/file"))
    415420        # default != None means we really expect a tahoe path, regardless of
    416421        # whether we're on windows or not. This is what 'tahoe get' uses.
    417         self.failUnlessReallyEqual(ga1(u"c:"), ("CA", ""))
    418         self.failUnlessReallyEqual(ga1(u"c:file"), ("CA", "file"))
    419         self.failUnlessReallyEqual(ga1(u"c:dir/file"), ("CA", "dir/file"))
     422        self.failUnlessReallyEqual(ga1(u"c:"), (CA, ""))
     423        self.failUnlessReallyEqual(ga1(u"c:file"), (CA, "file"))
     424        self.failUnlessReallyEqual(ga1(u"c:dir/file"), (CA, "dir/file"))
    420425        self.failUnlessReallyEqual(ga1(u"URI:stuff"), ("URI:stuff", ""))
    421426        self.failUnlessReallyEqual(ga1(u"URI:stuff/file"), ("URI:stuff", "file"))
    422427        self.failUnlessReallyEqual(ga1(u"URI:stuff:./file"), ("URI:stuff", "file"))
    class CLI(CLITestMixin, unittest.TestCase): 
    435440                             (DefaultAliasMarker, "baredir/file:7"))
    436441        self.failUnlessReallyEqual(ga2(u"baredir/sub:1/file:7"),
    437442                             (DefaultAliasMarker, "baredir/sub:1/file:7"))
    438         self.failUnlessReallyEqual(ga2(u"tahoe:"), ("TA", ""))
    439         self.failUnlessReallyEqual(ga2(u"tahoe:file"), ("TA", "file"))
    440         self.failUnlessReallyEqual(ga2(u"tahoe:dir/file"), ("TA", "dir/file"))
     443        self.failUnlessReallyEqual(ga2(u"tahoe:"), (TA, ""))
     444        self.failUnlessReallyEqual(ga2(u"tahoe:file"), (TA, "file"))
     445        self.failUnlessReallyEqual(ga2(u"tahoe:dir/file"), (TA, "dir/file"))
    441446        # on windows, we really want c:foo to indicate a local file.
    442447        # default==None is what 'tahoe cp' uses.
    443448        if uses_lettercolon:
    class CLI(CLITestMixin, unittest.TestCase): 
    446451            self.failUnlessReallyEqual(ga2(u"c:dir/file"),
    447452                                 (DefaultAliasMarker, "c:dir/file"))
    448453        else:
    449             self.failUnlessReallyEqual(ga2(u"c:"), ("CA", ""))
    450             self.failUnlessReallyEqual(ga2(u"c:file"), ("CA", "file"))
    451             self.failUnlessReallyEqual(ga2(u"c:dir/file"), ("CA", "dir/file"))
    452         self.failUnlessReallyEqual(ga2(u"work:"), ("WA", ""))
    453         self.failUnlessReallyEqual(ga2(u"work:file"), ("WA", "file"))
    454         self.failUnlessReallyEqual(ga2(u"work:dir/file"), ("WA", "dir/file"))
     454            self.failUnlessReallyEqual(ga2(u"c:"), (CA, ""))
     455            self.failUnlessReallyEqual(ga2(u"c:file"), (CA, "file"))
     456            self.failUnlessReallyEqual(ga2(u"c:dir/file"), (CA, "dir/file"))
     457        self.failUnlessReallyEqual(ga2(u"work:"), (WA, ""))
     458        self.failUnlessReallyEqual(ga2(u"work:file"), (WA, "file"))
     459        self.failUnlessReallyEqual(ga2(u"work:dir/file"), (WA, "dir/file"))
    455460        self.failUnlessReallyEqual(ga2(u"URI:stuff"), ("URI:stuff", ""))
    456461        self.failUnlessReallyEqual(ga2(u"URI:stuff/file"), ("URI:stuff", "file"))
    457462        self.failUnlessReallyEqual(ga2(u"URI:stuff:./file"), ("URI:stuff", "file"))
    class CLI(CLITestMixin, unittest.TestCase): 
    476481                             (DefaultAliasMarker, "baredir/file:7"))
    477482        self.failUnlessReallyEqual(ga3(u"baredir/sub:1/file:7"),
    478483                             (DefaultAliasMarker, "baredir/sub:1/file:7"))
    479         self.failUnlessReallyEqual(ga3(u"tahoe:"), ("TA", ""))
    480         self.failUnlessReallyEqual(ga3(u"tahoe:file"), ("TA", "file"))
    481         self.failUnlessReallyEqual(ga3(u"tahoe:dir/file"), ("TA", "dir/file"))
     484        self.failUnlessReallyEqual(ga3(u"tahoe:"), (TA, ""))
     485        self.failUnlessReallyEqual(ga3(u"tahoe:file"), (TA, "file"))
     486        self.failUnlessReallyEqual(ga3(u"tahoe:dir/file"), (TA, "dir/file"))
    482487        self.failUnlessReallyEqual(ga3(u"c:"), (DefaultAliasMarker, "c:"))
    483488        self.failUnlessReallyEqual(ga3(u"c:file"), (DefaultAliasMarker, "c:file"))
    484489        self.failUnlessReallyEqual(ga3(u"c:dir/file"),
    485490                             (DefaultAliasMarker, "c:dir/file"))
    486         self.failUnlessReallyEqual(ga3(u"work:"), ("WA", ""))
    487         self.failUnlessReallyEqual(ga3(u"work:file"), ("WA", "file"))
    488         self.failUnlessReallyEqual(ga3(u"work:dir/file"), ("WA", "dir/file"))
     491        self.failUnlessReallyEqual(ga3(u"work:"), (WA, ""))
     492        self.failUnlessReallyEqual(ga3(u"work:file"), (WA, "file"))
     493        self.failUnlessReallyEqual(ga3(u"work:dir/file"), (WA, "dir/file"))
    489494        self.failUnlessReallyEqual(ga3(u"URI:stuff"), ("URI:stuff", ""))
    490495        self.failUnlessReallyEqual(ga3(u"URI:stuff:./file"), ("URI:stuff", "file"))
    491496        self.failUnlessReallyEqual(ga3(u"URI:stuff:./dir/file"), ("URI:stuff", "dir/file"))
    class CLI(CLITestMixin, unittest.TestCase): 
    510515            return retval
    511516        self.failUnlessRaises(common.UnknownAliasError, ga5, u"C:\\Windows")
    512517
     518    def test_alias_tolerance(self):
     519        def s128(c): return base32.b2a(c*(128/8))
     520        def s256(c): return base32.b2a(c*(256/8))
     521        TA = "URI:DIR2:%s:%s" % (s128("T"), s256("T"))
     522        aliases = {"present": TA,
     523                   "future": "URI-FROM-FUTURE:ooh:aah"}
     524        def ga1(path):
     525            return get_alias(aliases, path, u"tahoe")
     526        self.failUnlessReallyEqual(ga1(u"present:file"), (TA, "file"))
     527        # this throws, via assert IDirnodeURI.providedBy(), since get_alias()
     528        # wants a dirnode, and the future cap gives us UnknownURI instead.
     529        #ga1(u"future:stuff")
     530
    513531    def test_listdir_unicode_good(self):
    514532        filenames = [u'L\u00F4zane', u'Bern', u'Gen\u00E8ve']  # must be NFC
    515533