NAME

Test::Virtual::Filesystem - Validate a filesystem

SYNOPSIS

use Test::Virtual::Filesystem;
Test::Virtual::Filesystem->new('/path/to/test')->runtests;

or with more customization:

use Test::Virtual::Filesystem;
my $test = Test::Virtual::Filesystem->new('/path/to/test');
$test->test_xattr(1);
$test->test_chown(1);
$test->test_atime(1);
$test->runtests;

LICENSE

Copyright 2007 Chris Dolan, cdolan@cpan.org

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

DESCRIPTION

If you are creating a filesystem, say via Fuse or Filesys::Virtual, you need a fairly mundane set of tests to try out lots of typical filesystem operations. This package attempts to accumulate a bunch of those tests to make it easier for you to test your filesystem.

CAVEATS AND LIMITATIONS

This test class needs a more complete suite of test cases. In particular, tests are needed for the following filesystem features:

extended attributes (xattr)
symlinks
hardlinks
a/u/ctime
nlink
chown
deep directories
very full directories
large files
binary files
files with awkward characters: EOF, NUL
non-ASCII filenames (maybe constructor should specify the encoding)
permissions
special file types (fifos, sockets, character and block devices, etc)
file locking
threading and re-entrancy
truncate
binmode
eof
fileno
seek/rewinddir, tell/telldir
read, sysread, syswrite
async I/O?

COMPATIBILITY

Until this package reaches v1.0, we will add arbitrary new tests which may break compatibility. After 1.0, we will tag every test with a version number. If client code specifies an expected version number (say, 1.10) and it's running against a newer version (say, 1.20) then any newer test that fails will be marked as a TODO test.

This policy will allow us to continue adding new filesystem tests without worrying about breaking existing CPAN modules.

METHODS

This is a subclass of Test::Class. All methods from that class are available, particularly runtests().

$pkg->new({mountdir => $mountdir, ...})

Create a new test which will operate on files contained within the specified mount directory. WARNING: any and all files and folders in that mount directory will be deleted!

The supported options are:

mountdir

This required property indicates where tests should run.

compatible

Specify a Test::Virtual::Filesystem version number that is known to work. If the actual Test::Virtual::Filesystem version number is greater, then any test cases added after the compatible version are considered TODO tests. See Test::More for details about TODO tests.

$self->init()

Invoked just before then end of new(). This exists solely for subclassing convenience. This implementation does nothing.

PROPERTIES

The following accessor/mutator methods exist to turn on/off various features. they all behave in usual Perl fashion: with no argument, they return the current value. With one argument, they set the current value and return void.

$self->test_xattr()

Default false.

$self->test_time()

Default true. If set false, it also sets atime, ctime and utime false.

$self->test_atime()

Default false.

$self->test_utime()

Default true.

$self->test_ctime()

Default true.

$self->test_permissions()

Default false.

$self->test_special()

Default true. If set false, it also sets fifo false.

$self->test_fifo()

Default false. AKA named pipes.

$self->test_symlink()

Default true, except $^O eq 'MSWin32' where it defaults to false.

$self->test_hardlink()

Default true.

$self->test_nlink()

Default true.

$self->test_chown()

Default false.

TEST CASES

stat_dir(), introduced in v0.01
read_dir(), introduced in v0.01
read_dir_fail(), introduced in v0.01
read_file_fail(), introduced in v0.01
write_empty_file(), introduced in v0.01
write_file(), introduced in v0.01
write_file_subdir_fail(), introduced in v0.01
write_append_file(), introduced in v0.01
write_read_file(), introduced in v0.01
write_mkdir(), introduced in v0.01
write_mkdir_fail(), introduced in v0.01
write_rmdir(), introduced in v0.01
write_subdir(), introduced in v0.01

SEE ALSO

Test::Class

Fuse::PDF

AUTHOR

Chris Dolan, cdolan@cpan.org