More cleanups to test_cli using new utilities for reading and writing files.

This commit is contained in:
david-sarah 2010-02-05 17:38:55 -08:00
parent c984a09fe7
commit 85a50feeaa

View File

@ -28,6 +28,7 @@ from twisted.python import usage
timeout = 480 # deep_check takes 360s on Zandr's linksys box, others take > 240s timeout = 480 # deep_check takes 360s on Zandr's linksys box, others take > 240s
class CLI(unittest.TestCase): class CLI(unittest.TestCase):
# this test case only looks at argument-processing and simple stuff. # this test case only looks at argument-processing and simple stuff.
def test_options(self): def test_options(self):
@ -158,9 +159,7 @@ class CLI(unittest.TestCase):
self.failUnless("file renewal secret: arpszxzc2t6kb4okkg7sp765xgkni5z7caavj7lta73vmtymjlxq" in output, output) self.failUnless("file renewal secret: arpszxzc2t6kb4okkg7sp765xgkni5z7caavj7lta73vmtymjlxq" in output, output)
fileutil.make_dirs("cli/test_dump_cap/private") fileutil.make_dirs("cli/test_dump_cap/private")
f = open("cli/test_dump_cap/private/secret", "w") fileutil.write("cli/test_dump_cap/private/secret", "5s33nk3qpvnj2fw3z4mnm2y6fa\n")
f.write("5s33nk3qpvnj2fw3z4mnm2y6fa\n")
f.close()
output = self._dump_cap("--client-dir", "cli/test_dump_cap", output = self._dump_cap("--client-dir", "cli/test_dump_cap",
u.to_string()) u.to_string())
self.failUnless("file renewal secret: arpszxzc2t6kb4okkg7sp765xgkni5z7caavj7lta73vmtymjlxq" in output, output) self.failUnless("file renewal secret: arpszxzc2t6kb4okkg7sp765xgkni5z7caavj7lta73vmtymjlxq" in output, output)
@ -252,15 +251,14 @@ class CLI(unittest.TestCase):
nodedir1 = "cli/test_catalog_shares/node1" nodedir1 = "cli/test_catalog_shares/node1"
sharedir = os.path.join(nodedir1, "storage", "shares", "mq", "mqfblse6m5a6dh45isu2cg7oji") sharedir = os.path.join(nodedir1, "storage", "shares", "mq", "mqfblse6m5a6dh45isu2cg7oji")
fileutil.make_dirs(sharedir) fileutil.make_dirs(sharedir)
f = open(os.path.join(sharedir, "8"), "wb") fileutil.write("cli/test_catalog_shares/node1/storage/shares/mq/not-a-dir", "")
open("cli/test_catalog_shares/node1/storage/shares/mq/not-a-dir", "wb").close()
# write a bogus share that looks a little bit like CHK # write a bogus share that looks a little bit like CHK
f.write("\x00\x00\x00\x01" + "\xff" * 200) # this triggers an assert fileutil.write(os.path.join(sharedir, "8"),
f.close() "\x00\x00\x00\x01" + "\xff" * 200) # this triggers an assert
nodedir2 = "cli/test_catalog_shares/node2" nodedir2 = "cli/test_catalog_shares/node2"
fileutil.make_dirs(nodedir2) fileutil.make_dirs(nodedir2)
open("cli/test_catalog_shares/node1/storage/shares/not-a-dir", "wb").close() fileutil.write("cli/test_catalog_shares/node1/storage/shares/not-a-dir", "")
# now make sure that the 'catalog-shares' commands survives the error # now make sure that the 'catalog-shares' commands survives the error
out, err = self._catalog_shares(nodedir1, nodedir2) out, err = self._catalog_shares(nodedir1, nodedir2)
@ -491,7 +489,7 @@ class CreateAlias(GridTestMixin, CLITestMixin, unittest.TestCase):
def _stash_urls(res): def _stash_urls(res):
aliases = get_aliases(self.get_clientdir()) aliases = get_aliases(self.get_clientdir())
node_url_file = os.path.join(self.get_clientdir(), "node.url") node_url_file = os.path.join(self.get_clientdir(), "node.url")
nodeurl = open(node_url_file, "r").read().strip() nodeurl = fileutil.read(node_url_file).strip()
self.welcome_url = nodeurl self.welcome_url = nodeurl
uribase = nodeurl + "uri/" uribase = nodeurl + "uri/"
self.tahoe_url = uribase + urllib.quote(aliases["tahoe"]) self.tahoe_url = uribase + urllib.quote(aliases["tahoe"])
@ -540,15 +538,11 @@ class CreateAlias(GridTestMixin, CLITestMixin, unittest.TestCase):
d.addCallback(_test_urls) d.addCallback(_test_urls)
def _remove_trailing_newline_and_create_alias(ign): def _remove_trailing_newline_and_create_alias(ign):
f = open(aliasfile, "r")
old = f.read()
f.close()
# ticket #741 is about a manually-edited alias file (which # ticket #741 is about a manually-edited alias file (which
# doesn't end in a newline) being corrupted by a subsequent # doesn't end in a newline) being corrupted by a subsequent
# "tahoe create-alias" # "tahoe create-alias"
f = open(aliasfile, "w") old = fileutil.read(aliasfile)
f.write(old.rstrip()) fileutil.write(aliasfile, old.rstrip())
f.close()
return self.do_cli("create-alias", "un-corrupted1") return self.do_cli("create-alias", "un-corrupted1")
d.addCallback(_remove_trailing_newline_and_create_alias) d.addCallback(_remove_trailing_newline_and_create_alias)
def _check_not_corrupted1((rc,stdout,stderr)): def _check_not_corrupted1((rc,stdout,stderr)):
@ -570,12 +564,8 @@ class CreateAlias(GridTestMixin, CLITestMixin, unittest.TestCase):
def _remove_trailing_newline_and_add_alias(ign): def _remove_trailing_newline_and_add_alias(ign):
# same thing, but for "tahoe add-alias" # same thing, but for "tahoe add-alias"
f = open(aliasfile, "r") old = fileutil.read(aliasfile)
old = f.read() fileutil.write(aliasfile, old.rstrip())
f.close()
f = open(aliasfile, "w")
f.write(old.rstrip())
f.close()
return self.do_cli("add-alias", "un-corrupted2", self.two_uri) return self.do_cli("add-alias", "un-corrupted2", self.two_uri)
d.addCallback(_remove_trailing_newline_and_add_alias) d.addCallback(_remove_trailing_newline_and_add_alias)
def _check_not_corrupted((rc,stdout,stderr)): def _check_not_corrupted((rc,stdout,stderr)):
@ -680,9 +670,7 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase):
rel_fn = os.path.join(self.basedir, "DATAFILE") rel_fn = os.path.join(self.basedir, "DATAFILE")
abs_fn = os.path.abspath(rel_fn) abs_fn = os.path.abspath(rel_fn)
# we make the file small enough to fit in a LIT file, for speed # we make the file small enough to fit in a LIT file, for speed
f = open(rel_fn, "w") fileutil.write(rel_fn, "short file")
f.write("short file")
f.close()
d = self.do_cli("put", rel_fn) d = self.do_cli("put", rel_fn)
def _uploaded((rc,stdout,stderr)): def _uploaded((rc,stdout,stderr)):
readcap = stdout readcap = stdout
@ -713,9 +701,7 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase):
# we make the file small enough to fit in a LIT file, for speed # we make the file small enough to fit in a LIT file, for speed
DATA = "short file" DATA = "short file"
DATA2 = "short file two" DATA2 = "short file two"
f = open(rel_fn, "w") fileutil.write(rel_fn, DATA)
f.write(DATA)
f.close()
d = self.do_cli("create-alias", "tahoe") d = self.do_cli("create-alias", "tahoe")
@ -794,9 +780,7 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase):
DATA2 = "two" * 100 DATA2 = "two" * 100
rel_fn = os.path.join(self.basedir, "DATAFILE") rel_fn = os.path.join(self.basedir, "DATAFILE")
DATA3 = "three" * 100 DATA3 = "three" * 100
f = open(rel_fn, "w") fileutil.write(rel_fn, DATA3)
f.write(DATA3)
f.close()
d = self.do_cli("put", "--mutable", stdin=DATA) d = self.do_cli("put", "--mutable", stdin=DATA)
def _created(res): def _created(res):
@ -840,14 +824,10 @@ class Put(GridTestMixin, CLITestMixin, unittest.TestCase):
DATA1 = "data" * 100 DATA1 = "data" * 100
fn1 = os.path.join(self.basedir, "DATA1") fn1 = os.path.join(self.basedir, "DATA1")
f = open(fn1, "w") fileutil.write(fn1, DATA1)
f.write(DATA1)
f.close()
DATA2 = "two" * 100 DATA2 = "two" * 100
fn2 = os.path.join(self.basedir, "DATA2") fn2 = os.path.join(self.basedir, "DATA2")
f = open(fn2, "w") fileutil.write(fn2, DATA2)
f.write(DATA2)
f.close()
d = self.do_cli("create-alias", "tahoe") d = self.do_cli("create-alias", "tahoe")
d.addCallback(lambda res: d.addCallback(lambda res:
@ -1184,47 +1164,52 @@ class Cp(GridTestMixin, CLITestMixin, unittest.TestCase):
# keep track of the filecap # keep track of the filecap
self.filecap = out.strip() self.filecap = out.strip()
d.addCallback(_put_file) d.addCallback(_put_file)
# Let's try copying this to the disk using the filecap # Let's try copying this to the disk using the filecap
# cp FILECAP filename # cp FILECAP filename
d.addCallback(lambda res: self.do_cli("cp", self.filecap, fn2)) d.addCallback(lambda ign: self.do_cli("cp", self.filecap, fn2))
def _copy_file((rc, out, err)): def _copy_file((rc, out, err)):
self.failUnlessEqual(rc, 0) self.failUnlessEqual(rc, 0)
results = open(fn2, "r").read() results = fileutil.read(fn2)
self.failUnlessEqual(results, DATA1) self.failUnlessEqual(results, DATA1)
d.addCallback(_copy_file) d.addCallback(_copy_file)
# Test with ./ (see #761) # Test with ./ (see #761)
# cp FILECAP localdir # cp FILECAP localdir
d.addCallback(lambda res: self.do_cli("cp", self.filecap, outdir)) d.addCallback(lambda ign: self.do_cli("cp", self.filecap, outdir))
def _resp((rc, out, err)): def _resp((rc, out, err)):
self.failUnlessEqual(rc, 1) self.failUnlessEqual(rc, 1)
self.failUnlessIn("error: you must specify a destination filename", self.failUnlessIn("error: you must specify a destination filename",
err) err)
d.addCallback(_resp) d.addCallback(_resp)
# Create a directory, linked at tahoe:test # Create a directory, linked at tahoe:test
d.addCallback(lambda res: self.do_cli("mkdir", "tahoe:test")) d.addCallback(lambda ign: self.do_cli("mkdir", "tahoe:test"))
def _get_dir((rc, out, err)): def _get_dir((rc, out, err)):
self.failUnlessEqual(rc, 0) self.failUnlessEqual(rc, 0)
self.dircap = out.strip() self.dircap = out.strip()
d.addCallback(_get_dir) d.addCallback(_get_dir)
# Upload a file to the directory # Upload a file to the directory
d.addCallback(lambda res: d.addCallback(lambda ign:
self.do_cli("put", fn1, "tahoe:test/test_file")) self.do_cli("put", fn1, "tahoe:test/test_file"))
d.addCallback(lambda (rc, out, err): self.failUnlessEqual(rc, 0)) d.addCallback(lambda (rc, out, err): self.failUnlessEqual(rc, 0))
# cp DIRCAP/filename localdir # cp DIRCAP/filename localdir
d.addCallback(lambda res: d.addCallback(lambda ign:
self.do_cli("cp", self.dircap + "/test_file", outdir)) self.do_cli("cp", self.dircap + "/test_file", outdir))
def _get_resp((rc, out, err)): def _get_resp((rc, out, err)):
self.failUnlessEqual(rc, 0) self.failUnlessEqual(rc, 0)
results = open(os.path.join(outdir, "test_file"), "r").read() results = fileutil.read(os.path.join(outdir, "test_file"))
self.failUnlessEqual(results, DATA1) self.failUnlessEqual(results, DATA1)
d.addCallback(_get_resp) d.addCallback(_get_resp)
# cp -r DIRCAP/filename filename2 # cp -r DIRCAP/filename filename2
d.addCallback(lambda res: d.addCallback(lambda ign:
self.do_cli("cp", self.dircap + "/test_file", fn3)) self.do_cli("cp", self.dircap + "/test_file", fn3))
def _get_resp2((rc, out, err)): def _get_resp2((rc, out, err)):
self.failUnlessEqual(rc, 0) self.failUnlessEqual(rc, 0)
results = open(fn3, "r").read() results = fileutil.read(fn3)
self.failUnlessEqual(results, DATA1) self.failUnlessEqual(results, DATA1)
d.addCallback(_get_resp2) d.addCallback(_get_resp2)
return d return d
@ -1252,11 +1237,9 @@ class Cp(GridTestMixin, CLITestMixin, unittest.TestCase):
class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase): class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase):
def writeto(self, path, data): def writeto(self, path, data):
d = os.path.dirname(os.path.join(self.basedir, "home", path)) full_path = os.path.join(self.basedir, "home", path)
fileutil.make_dirs(d) fileutil.make_dirs(os.path.dirname(full_path))
f = open(os.path.join(self.basedir, "home", path), "w") fileutil.write(full_path, data)
f.write(data)
f.close()
def count_output(self, out): def count_output(self, out):
mo = re.search(r"(\d)+ files uploaded \((\d+) reused\), " mo = re.search(r"(\d)+ files uploaded \((\d+) reused\), "
@ -1495,9 +1478,7 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase):
basedir = "cli/Backup/exclude_options" basedir = "cli/Backup/exclude_options"
fileutil.make_dirs(basedir) fileutil.make_dirs(basedir)
nodeurl_path = os.path.join(basedir, 'node.url') nodeurl_path = os.path.join(basedir, 'node.url')
nodeurl = file(nodeurl_path, 'w') fileutil.write(nodeurl_path, 'http://example.net:2357/')
nodeurl.write('http://example.net:2357/')
nodeurl.close()
def _check_filtering(filtered, all, included, excluded): def _check_filtering(filtered, all, included, excluded):
filtered = set(filtered) filtered = set(filtered)
@ -1531,9 +1512,7 @@ class Backup(GridTestMixin, CLITestMixin, StallMixin, unittest.TestCase):
# read exclude patterns from file # read exclude patterns from file
exclusion_string = "_darcs\n*py\n.svn" exclusion_string = "_darcs\n*py\n.svn"
excl_filepath = os.path.join(basedir, 'exclusion') excl_filepath = os.path.join(basedir, 'exclusion')
excl_file = file(excl_filepath, 'w') fileutil.write(excl_filepath, exclusion_string)
excl_file.write(exclusion_string)
excl_file.close()
backup_options = cli.BackupOptions() backup_options = cli.BackupOptions()
backup_options.parseOptions(['--exclude-from', excl_filepath, '--node-directory', backup_options.parseOptions(['--exclude-from', excl_filepath, '--node-directory',
basedir, 'from', 'to']) basedir, 'from', 'to'])