Commit Graph

48 Commits

Author SHA1 Message Date
robk-tahoe
0a2f32649f fuse/tests: slew of changes to fuse 'runtests'
This patch makes a significant number of changes to the fuse 'runtests' script
which stem from my efforts to integrate the third fuse implementation into this
framework.  Perhaps not all were necessary to that end, and I beg nejucomo's
forebearance if I got too carried away.

- cleaned up the blank lines; imho blank lines should be empty

- made the unmount command switch based on platform, since macfuse just uses
'umount' not the 'fusermount' command (which doesn't exist)

- made the expected working dir for runtests the contrib/fuse dir, not the 
top-level tahoe source tree - see also discussion of --path-to-tahoe below

- significantly reworked the ImplProcManager class.  rather than subclassing
for each fuse implementation to be tested, the new version is based on 
instantiating objects and providing relevant config info to the constructor.
this was motivated by a desire to eliminate the duplication of similar but
subtly different code between instances, framed by consideration of increasing
the number of platforms and implementations involved. each implementation to
test is thus reduced to the pertinent import and an entry in the 
'implementations' table defining how to handle that implementation. this also
provides a way to specify which sets of tests to run for each implementation,
more on that below.


- significantly reworked the command line options parsing, using twisted.usage;

what used to be a single optional argument is now represented by the 
--test-type option which allows one to choose between running unittests, the
system tests, or both.

the --implementations option allows for a specific (comma-separated) list of
implemenations to be tested, or the default 'all'

the --tests option allows for a specific (comma-separated) list of tests sets
to be run, or the default 'all'.  note that only the intersection of tests
requested on the command line and tests relevant to each implementation will
be run. see below for more on tests sets.

the --path-to-tahoe open allows for the path to the 'tahoe' executable to be
specified. it defaults to '../../bin/tahoe' which is the location of the tahoe
script in the source tree relative to the contrib/fuse dir by default.

the --tmp-dir option controls where temporary directories (and hence 
mountpoints) are created during the test.  this defaults to /tmp - a change
from the previous behaviour of using the system default dir for calls to 
tempfile.mkdtemp(), a behaviour which can be obtained by providing an empty
value, e.g. "--tmp-dir=" 

the --debug-wait flag causes the test runner to pause waiting upon user
input at various stages through the testing, which facilitates debugging e.g.
by allowing the user to open a browser and explore or modify the contents of
the ephemeral grid after it has been instantiated but before tests are run,
or make environmental adjustments before actually triggering fuse mounts etc.
note that the webapi url for the first client node is printed out upon its
startup to facilitate this sort of debugging also.


- the default tmp dir was changed, and made configurable. previously the 
default behaviour of tempfile.mkdtemp() was used.  it turns out that, at least
on the mac, that led to temporary directories to be created in a location
which ultimately led to mountpoint paths longer than could be handled by 
macfuse - specifically mounted filesystems could not be unmounted and would
'leak'. by changing the default location to be rooted at /tmp this leads to
mountpoint paths short enough to be supported without problems.

- tests are now grouped into 'sets' by method name prefix.  all the existing
tests have been moved into the 'read' set, i.e. with method names starting
'test_read_'. this is intended to facilitate the fact that some implementations
are read-only, and some support write, so the applicability of tests will vary
by implementation. the 'implementations' table, which governs the configuration
of the ImplProcManager responsible for a given implementation, provides a list
of 'test' (i.e test set names) which are applicable to that implementation.
note no 'write' tests yet exist, this is merely laying the groundwork.

- the 'expected output' of the tahoe command, which is checked for 'surprising'
output by regex match, can be confused by spurious output from libraries.
specfically, testing on the mac produced a warning message about zope interface
resolution various multiple eggs.  the 'check_tahoe_output()' function now has
a list of 'ignorable_lines' (each a regex) which will be discarded before the
remainder of the output of the tahoe script is matched against expectation.

- cleaned up a typo, and a few spurious imports caught by pyflakes
2008-09-24 11:36:01 -07:00
robk-tahoe
4f04bf99a5 fuse/impl_{a,b}: improve node-url handling
specifically change the expectation of the code to be such that the node-url
(self.url) always includes the trailing slash to be a correctly formed url

moreover read the node-url from the 'node.url' file found in the node 'basedir'
and only if that doesn't exist, then fall back to reading the 'webport' file
from therein and assuming localhost.  This then supports the general tahoe 
pattern that tools needing only a webapi server can be pointed at a directory
containing the node.url file, which can optionally point to another server,
rather than requiring a complete node dir and locally running node instance.
2008-09-24 11:28:54 -07:00
robk-tahoe
97229238b0 fuse/impl_b: tweaks from testing on hardy
from testing on linux (specifically ubuntu hardy) the libfuse dll has a
different name, specifically libfuse.so.2. this patch tries libfuse.so
and then falls back to trying .2 if the former fails.

it also changes the unmount behaviour, to simply return from the handler's
loop_forever() loop upon being unmounted, rather than raising an EOFError,
since none of the client code I looked at actually handled that exception,
but did seem to expect to fall off of main() when loop_forever() returned.
Additionally, from my testing unmount typically led to an OSError from the
fuse fd read, rather than an empty read, as the code seemed to expect.

also removed a spurious import pyflakes quibbled about.
2008-09-24 11:07:38 -07:00
nejucomo
8e9bb72008 fuse: runtests: Create an interface for setup/cleanup of the two implementations...
The impl_b cleanup appears incorrect.  I'm not sure what the proper behavior is.
2008-06-07 00:08:25 -07:00
nejucomo
171b430afb fuse: runtests: Wrap OSError exceptions which are test failures. 2008-06-07 00:07:18 -07:00
nejucomo
609e9b08da fuse: runtests: Move exception classes to top scope. 2008-06-07 00:06:00 -07:00
nejucomo
15fdb572b8 fuse: runtests: Fix typo in summary reporting. 2008-06-07 00:05:07 -07:00
nejucomo
0a94ac5732 fuse: runtests: Make test numbers (and everything in general) 0-indexed for consistency. 2008-06-06 23:19:15 -07:00
nejucomo
f665b10b12 fuse: runtests.py: Fix a typo bug in fusermount output checking. 2008-06-06 23:18:15 -07:00
nejucomo
4d8aac35f4 fuse: runtests.py: Fix bug in polling_operation error that always referred to introducer.furl. 2008-06-06 23:17:19 -07:00
nejucomo
4f94d00abe fuse: impl_b: Support --basedir on commandline. 2008-06-06 23:16:38 -07:00
nejucomo
2fa5785960 fuse: impl_b: Add impl_b to the contrib directory. 2008-06-06 22:22:36 -07:00
nejucomo
e538651947 fuse: Reorganize directory tree and modify runtests.py to run against both implementations...
Currently, fuse impl_b does not support a --basedir argument, and always
uses ~/.tahoe, which makes it incompatible with these system tests.
2008-06-06 22:19:23 -07:00
Zooko O'Whielacronx
c88ea89f14 contrib: add a note about Armin Rigo's fuse implementation 2008-04-28 07:05:44 -07:00
nejucomo
67660232f1 tahoe_fuse: system test: Verify file contents can be properly read. 2008-01-30 03:14:48 -07:00
nejucomo
28552e5967 tahoe_fuse: system test: Populate a testdir with files and empty children directories, then test the fuse interface for proper listings and size metadata. 2008-01-30 02:59:43 -07:00
nejucomo
7240021d1c tahoe_fuse: system test: Create a separate directory for each test and pass the cap and local path to each test. Add two basic sanity tests for empty directories. 2008-01-30 02:57:54 -07:00
nejucomo
9ecfbc62cd tahoe_fuse: system test: Replace repeated attempts at webapi calls with single calls, abstract webapi calls into a single function. 2008-01-30 02:56:25 -07:00
nejucomo
0dbdb0f871 tahoe_fuse: system test: Remove some needless comments. 2008-01-30 02:55:53 -07:00
nejucomo
5e94c07045 tahoe_fuse: system test: Move test summary to end of output. 2008-01-30 02:46:24 -07:00
nejucomo
ab3d399ac7 tahoe_fuse: system tests: Update comments. 2008-01-30 02:45:54 -07:00
nejucomo
98e92e2a48 tahoe_fuse: system test: Make output checking into non-fatal warnings, and make patterns looser. 2008-01-30 01:10:53 -07:00
nejucomo
3aceb6be1e tahoe_fuse.py: system test: Distinguish between TestFailures and unexpected exceptions during testing (and fix a typo). 2008-01-28 22:42:28 -07:00
nejucomo
7421d99f18 tahoe_fuse.py: system test: setup: lexically sort test names, create a TestFailure class, implement an empty directory listing test. 2008-01-28 22:40:47 -07:00
nejucomo
597ab62d12 tahoe_fuse.py: system test: setup: fixed a bug in which the mointpoint was not created before mounting. 2008-01-28 22:39:13 -07:00
nejucomo
7fe264d280 tahoe_fuse.py: system test: Many changes to framework...
The flow control has been de-obfuscated a bit.

Some output changes.

The test framework has quite a few race conditions, but it does a reasonable job of setting up and cleaning up.
2008-01-28 22:27:19 -07:00
nejucomo
b4c566efca Individual tests run after all the setup layers are in place. 2008-01-28 22:25:11 -07:00
nejucomo
de022b2115 tahoe_fuse: cmdline args & system test: Allow nonstandard client basedirs to be specified and update the system tests to use this feature...
The commandline option handling of the version of python-fuse I use is arcane.  This is an ugly hack.
2008-01-20 20:56:27 -07:00
nejucomo
57da456dc9 tahoe_fuse: rename decorators for clarity. 2008-01-20 20:26:57 -07:00
nejucomo
c621fe1aa6 Small log output change. 2008-01-20 20:18:53 -07:00
nejucomo
ba4458d502 tahoe_fuse: system test: webapi connection: bug fix and small log output change. 2008-01-20 20:10:31 -07:00
nejucomo
b4b410eccf tahoe_fuse: system test: Add FIXME comments. 2008-01-20 20:06:19 -07:00
nejucomo
d1c0aa6ea6 tahoe_fuse: system test: Manage multiple clients for test grid... System test setup is almost complete.
This is a little convoluted because of the "layer" design, but it appears
to function correctly and do properly ordered cleanup.

Before system test setup is complete, tahoe_fuse.py needs to be modified
to allow arbitrary client base directories.
2008-01-20 20:02:20 -07:00
nejucomo
1f42953fb4 tahoe_fuse: system test: Attempt to create a dirnode to place in <basedir>/private/root_dir.cap, but this fails because the network is too small...
This patch also factors out the "polling_operation" pattern.
2008-01-20 18:47:47 -07:00
nejucomo
1295c1e4ec tahoe_fuse: system test: Launch the fuse interface. 2008-01-20 17:55:51 -07:00
nejucomo
c225c657d4 tahoe_fuse: system test: factor out some cleanup code. 2008-01-20 17:54:48 -07:00
nejucomo
c7a557ba69 tahoe_fuse: system test: Copy the introducer.furl with a possible race condition due to timeout. 2008-01-20 17:09:44 -07:00
nejucomo
026f2d0df5 A start at adding a system test for tahoe_fuse. Incomplete... 2008-01-20 16:54:56 -07:00
nejucomo
2b9ba229be Remove a redundant assertion for clarity. 2008-01-19 00:20:32 -07:00
nejucomo
686350f6cc Change stdout to rudimentary file-based logging. 2008-01-19 00:18:54 -07:00
nejucomo
0e0ab5f394 Rename the unittest script for tahoe-fuse. 2008-01-19 00:16:12 -07:00
nejucomo
eaba225e1f Wouldn't it be nice to reuse the allmydata library? 2008-01-12 21:41:26 -07:00
nejucomo
0b5f9ff5c3 Support url-encoding in caps. 2008-01-12 21:41:07 -07:00
nejucomo
a339ba6feb The start of unit tests for tahoe_fuse.py. 2008-01-12 19:56:03 -07:00
nejucomo
52fc80a54b Formatting changes and a few FIXMEs for tahoe_fuse.py 2008-01-12 19:55:38 -07:00
nejucomo
19fdb20bac Remove redundant docs from tahoe_fuse.py docstrings which are in the README. Add implementation-specific notes in the doc strings. 2008-01-12 19:54:33 -07:00
nejucomo
ddeb5eab54 Change the name of tahoe_fuse.py to something importable. 2008-01-12 18:50:53 -07:00
nejucomo
7214f2f8b8 A patch to make tahoe-fuse.py work with 0.7.0 plus a howto README. 2008-01-12 17:06:39 -07:00