Index: trunk/Nebulous/Build.PL
===================================================================
--- trunk/Nebulous/Build.PL	(revision 23740)
+++ trunk/Nebulous/Build.PL	(revision 23934)
@@ -95,4 +95,5 @@
         'Nebulous::Server::SOAP'    => 0,
         'Test::Nebulous'            => 0,
+        'Test::Cmd'                 => '1.05',
         'Apache2::SOAP'             => 0,
         'Apache::DBI'               => '1.05',
Index: trunk/Nebulous/Changes
===================================================================
--- trunk/Nebulous/Changes	(revision 23740)
+++ trunk/Nebulous/Changes	(revision 23934)
@@ -9,5 +9,4 @@
     - add neb-swap
     - add nebclient:nebSetXattr()
-    - add neb-rm --move flag
 
 0.09 Wed Jul  9 16:36:27 HST 2008
Index: trunk/Nebulous/MANIFEST
===================================================================
--- trunk/Nebulous/MANIFEST	(revision 23740)
+++ trunk/Nebulous/MANIFEST	(revision 23934)
@@ -98,4 +98,5 @@
 t/66_client_xattr.t
 t/67_client_swap.t
+t/70_neb-ls.t
 t/90_nebclient.t
 t/TEST.PL
Index: trunk/Nebulous/bin/neb-ls
===================================================================
--- trunk/Nebulous/bin/neb-ls	(revision 23740)
+++ trunk/Nebulous/bin/neb-ls	(revision 23934)
@@ -1,7 +1,5 @@
 #!/usr/bin/env perl
 
-# Copyright (C) 2007-2008  Joshua Hoblitt
-#
-# $Id: neb-ls,v 1.7 2008-06-12 20:03:37 jhoblitt Exp $
+# Copyright (C) 2007-2009  Joshua Hoblitt
 
 use strict;
@@ -9,5 +7,5 @@
 
 use vars qw( $VERSION );
-$VERSION = '0.02';
+$VERSION = '0.03';
 
 use Nebulous::Client;
@@ -16,5 +14,9 @@
 use Pod::Usage qw( pod2usage );
 
-my ($server, $long, $recursive);
+my (
+    $server,
+    $long,
+#    $recursive,
+);
 
 $server = $ENV{'NEB_SERVER'} unless $server;
@@ -22,5 +24,5 @@
 GetOptions(
     'server|s=s'    => \$server,
-    'recursive|r'   => \$recursive,
+#    'recursive|r'   => \$recursive,
     'l|1'           => \$long,
 ) || pod2usage( 2 );
@@ -39,12 +41,12 @@
     unless defined $neb;
 
-# default to listing everything (bad idea?)
-$pattern ||= ".*";
+# default to listing root
+$pattern ||= "/";
 
-if ($recursive) {
-    $pattern = "^" . $pattern . ".*";
-} else {
-    $pattern = "^" . $pattern . "\$";
-}
+#if ($recursive) {
+#    $pattern = "^" . $pattern . ".*";
+#} else {
+#    $pattern = "^" . $pattern . "\$";
+#}
 
 my $keys = $neb->find_objects($pattern);
@@ -86,12 +88,13 @@
 Optional
 
-=item * --recursive|-r
-
-By default C<neb-ls> will only try to match the exact string provided to it.
-With this option set all keys which match C<<pattern>> as a REGEX or substring
-will be returned.
-
-Optional
-
+=cut
+#=item * --recursive|-r
+#
+#By default C<neb-ls> will only try to match the exact string provided to it.
+#With this option set all keys which match C<<pattern>> as a REGEX or substring
+#will be returned.
+#
+#Optional
+#
 =item * --server|-s <URL>
 
@@ -130,5 +133,5 @@
 =head1 COPYRIGHT
 
-Copyright (C) 2007-2008  Joshua Hoblitt.  All rights reserved.
+Copyright (C) 2007-2009  Joshua Hoblitt.  All rights reserved.
 
 This program is free software; you can redistribute it and/or modify it under
Index: trunk/Nebulous/lib/Nebulous/Client.pm
===================================================================
--- trunk/Nebulous/lib/Nebulous/Client.pm	(revision 23740)
+++ trunk/Nebulous/lib/Nebulous/Client.pm	(revision 23934)
@@ -243,5 +243,5 @@
         # if the copy failed we now have a zero length instances floating
         # around that must be removed
-        unless ($self->delete_instance("$uri")) {
+        unless ($self->delete_instance($key, "$uri")) {
             $log->logdie( "can not copy instance $uri AND FAILED TO CLEANUP EMPTY INSTANCE" );
         }
@@ -256,5 +256,5 @@
 
     unless ($src_md5 eq $dst_md5) {
-        $self->delete_instance("$uri");
+        $self->delete_instance($key, "$uri");
         $log->logdie( "md5sum mismatch" );
     }
@@ -327,5 +327,5 @@
     }
 
-    my $uri = $self->delete_instance( @$locations[0] );
+    my $uri = $self->delete_instance($key, @$locations[0]);
 
     $log->debug("leaving");
@@ -615,4 +615,8 @@
             return;
         }
+        if ($response->faultstring =~ /does not match any key or directory/) {
+            $log->debug( "leaving" );
+            return;
+        }
 
         $log->logdie("unhandled fault - ", $self->err);
@@ -813,5 +817,5 @@
     # a lock is implicitly removed when the last storage object is deleted
     foreach my $uri ( @$locations ) {
-        $self->delete_instance( $uri ) or return undef;
+        $self->delete_instance($key, $uri) or return undef;
     }
 
@@ -944,5 +948,8 @@
     my $self = shift;
 
-    my ($uri) = validate_pos(@_,
+    my ($key, $uri) = validate_pos(@_,
+        {
+            type => SCALAR,
+        },
         {
             type => SCALAR,
@@ -961,5 +968,5 @@
     $log->logdie( $@ ) if $@;
 
-    my $response = $self->{ 'server' }->delete_instance( $uri );
+    my $response = $self->{ 'server' }->delete_instance($key, $uri);
     if ( $response->fault ) {
         $self->set_err($response->faultstring);
Index: trunk/Nebulous/lib/Nebulous/Util.pm
===================================================================
--- trunk/Nebulous/lib/Nebulous/Util.pm	(revision 23740)
+++ trunk/Nebulous/lib/Nebulous/Util.pm	(revision 23934)
@@ -45,4 +45,6 @@
 
 
+# XXX replace the unlink with a 'move to trash' operation
+# empty the trash with a daemon on the NSF server
 sub _nuke_file {
     my $path = shift;
Index: trunk/Nebulous/nebclient/tests/tap/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/.cvsignore	(revision 23934)
@@ -0,0 +1,13 @@
+.in
+Makefile
+Makefile.in
+aclocal.m4
+autom4te.cache
+config.log
+config.status
+configure
+libtool
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/bootstrap.sh
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/bootstrap.sh	(revision 23740)
+++ trunk/Nebulous/nebclient/tests/tap/bootstrap.sh	(revision 23934)
@@ -2,7 +2,7 @@
 
 set -x
-aclocal || exit 1
-autoheader || autoheader || exit 1
-libtoolize -c -f || libtoolize -c -f || glibtoolize -c -f || exit 1
-automake -a -c || automake -a -c || exit 1
-autoconf || autoconf || exit 1
+aclocal19 -I /usr/local/share/aclocal || aclocal || exit 1
+autoheader259 || autoheader || exit 1
+libtoolize15 -c -f || libtoolize -c -f || glibtoolize -c -f || exit 1
+automake19 -a -c || automake -a -c || exit 1
+autoconf259 || autoconf || exit 1
Index: trunk/Nebulous/nebclient/tests/tap/src/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/src/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/src/.cvsignore	(revision 23934)
@@ -0,0 +1,13 @@
+.deps
+.libs
+Makefile
+Makefile.in
+libtap.la
+tap.lo
+config.h
+config.h.in
+stamp-h1
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/.cvsignore	(revision 23934)
@@ -0,0 +1,6 @@
+Makefile
+Makefile.in
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/diag/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/diag/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/diag/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/fail/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/fail/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/fail/.cvsignore	(revision 23934)
@@ -0,0 +1,15 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/ok/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/ok/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/ok/.cvsignore	(revision 23934)
@@ -0,0 +1,6 @@
+Makefile
+Makefile.in
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/ok/ok-hash/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/ok/ok-hash/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/ok/ok-hash/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/ok/ok-numeric/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/ok/ok-numeric/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/ok/ok-numeric/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/ok/ok/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/ok/ok/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/ok/ok/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/pass/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/pass/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/pass/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/.cvsignore	(revision 23934)
@@ -0,0 +1,6 @@
+Makefile
+Makefile.in
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/no-tests/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/no-tests/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/no-tests/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/no_plan/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/no_plan/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/no_plan/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/not-enough-tests/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/not-enough-tests/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/not-enough-tests/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/sane/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/sane/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/sane/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/skip_all/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/skip_all/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/skip_all/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/too-many-plans/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/too-many-plans/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/too-many-plans/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/plan/too-many-tests/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/plan/too-many-tests/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/plan/too-many-tests/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/skip/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/skip/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/skip/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/nebclient/tests/tap/tests/todo/.cvsignore
===================================================================
--- trunk/Nebulous/nebclient/tests/tap/tests/todo/.cvsignore	(revision 23934)
+++ trunk/Nebulous/nebclient/tests/tap/tests/todo/.cvsignore	(revision 23934)
@@ -0,0 +1,11 @@
+.deps
+Makefile
+Makefile.in
+.libs
+test
+test.c.out
+test.pl.out
+*.bb
+*.bbg
+*.da
+gmon.out
Index: trunk/Nebulous/t/62_client_delete_instance.t
===================================================================
--- trunk/Nebulous/t/62_client_delete_instance.t	(revision 23740)
+++ trunk/Nebulous/t/62_client_delete_instance.t	(revision 23934)
@@ -3,5 +3,5 @@
 # Copryight (C) 2004-2005  Joshua Hoblitt
 #
-# $Id: 62_client_delete_instance.t,v 1.3 2008-12-14 22:48:35 eugene Exp $
+# $Id: 62_client_delete_instance.t,v 1.1.38.1 2008-12-14 22:03:08 eugene Exp $
 
 use strict;
@@ -10,5 +10,5 @@
 use Apache::Test qw( -withtestmore );
 
-plan tests => 9;
+plan tests => 11;
 
 use lib qw( ./t ./lib );
@@ -26,9 +26,11 @@
         proxy => "http://$hostport/nebulous",
     );
-    $neb->create( "foo" );
 
-    my $locations = $neb->find_instances( "foo" );
+    my $key = "foo";
+    $neb->create($key);
 
-    my $uri = $neb->delete_instance( @$locations[0] );
+    my $locations = $neb->find_instances($key);
+
+    my $uri = $neb->delete_instance($key, @$locations[0]);
 
     is( $uri, @$locations[0], "delete instance" );
@@ -43,10 +45,11 @@
         proxy => "http://$hostport/nebulous",
     );
-    $neb->create( "foo" );
-    $neb->replicate( "foo" );
+    my $key = "foo";
+    $neb->create($key);
+    $neb->replicate($key);
 
     my $uri1 = $neb->find_instances( "foo" )->[0];
 
-    ok( $neb->delete_instance( $uri1 ), "delete instance" );
+    ok( $neb->delete_instance($key, $uri1), "delete instance" );
 
     my $uri2 = $neb->find_instances( "foo" )->[0];
@@ -54,10 +57,12 @@
     isnt( $uri1, $uri2, "other instance remains" );
 
-    ok( $neb->delete_instance( $uri2 ), "delete instance" );
+    ok( $neb->delete_instance($key, $uri2), "delete instance" );
 
     my $locations = $neb->find_instances( "foo" );
 
-    is( $locations, undef, "no remaning instances" );
+    is( $locations, undef, "no remaining instances" );
 }
+
+Test::Nebulous->setup;
 
 {
@@ -65,5 +70,7 @@
         proxy => "http://$hostport/nebulous",
     );
-    my $uri = $neb->delete_instance( "file:/foo" );
+    my $key = "foo";
+    $neb->create($key);
+    my $uri = $neb->delete_instance($key, "file:/foo" );
 
     is( $uri, undef, "uri does not exist" );
@@ -76,7 +83,7 @@
         proxy => "http://$hostport/nebulous",
     );
-    $neb->delete_instance();
+    my $uri = $neb->delete_instance("foo", "file:/foo" );
 };
-like( $@, qr/1 was expected/, "no params" );
+like( $@, qr/is valid object key/, "bad object key" );
 
 Test::Nebulous->setup;
@@ -86,7 +93,27 @@
         proxy => "http://$hostport/nebulous",
     );
-    $neb->delete_instance( "foo", 2 );
+    my $uri = $neb->delete_instance("foo");
 };
-like( $@, qr/1 was expected/, "too many params" );
+like( $@, qr/2 were expected/, "missing second param" );
+
+Test::Nebulous->setup;
+
+eval {
+    my $neb = Nebulous::Client->new(
+        proxy => "http://$hostport/nebulous",
+    );
+    $neb->delete_instance();
+};
+like( $@, qr/2 were expected/, "no params" );
+
+Test::Nebulous->setup;
+
+eval {
+    my $neb = Nebulous::Client->new(
+        proxy => "http://$hostport/nebulous",
+    );
+    $neb->delete_instance("foo", 2, 3);
+};
+like( $@, qr/2 were expected/, "too many params" );
 
 Test::Nebulous->cleanup;
Index: trunk/Nebulous/t/70_neb-ls.t
===================================================================
--- trunk/Nebulous/t/70_neb-ls.t	(revision 23934)
+++ trunk/Nebulous/t/70_neb-ls.t	(revision 23934)
@@ -0,0 +1,206 @@
+#!/usr/bin/env perl
+
+# Copyright (C) 2009  Joshua Hoblitt
+
+=head1 NAME
+
+t/70_neb-ls.t - tests neb-ls
+
+=head1 SYNOPSIS
+    
+    prove t/70_neb-ls.t
+
+=cut
+
+use strict;
+use warnings;
+
+use Apache::Test qw( -withtestmore );
+plan tests => 31;
+
+use lib qw( ./lib ./t );
+
+use Test::Cmd;
+use Nebulous::Client;
+use Test::Nebulous;
+
+my $hostport = Apache::Test->config->{ 'hostport' };
+my $neb_url  = "http://$hostport/nebulous";
+
+
+my $cmd = 'bin/neb-ls';
+
+# last ditch effort to make sure dsget is executable
+chmod 0755, 'bin/neb-ls';
+
+my $test = Test::Cmd->new(prog => $cmd, workdir => '');
+isa_ok($test, 'Test::Cmd');
+
+# NEB_SERVER env var not set
+Test::Nebulous->setup;
+
+{
+    $test->run(args => '');
+    missing_args(2, "Required options: --server");
+}
+
+# NEB_SERVER set
+Test::Nebulous->setup;
+
+{
+    $ENV{NEB_SERVER} = $neb_url;
+
+    $test->run(args => '');
+    is($? >> 8, 0, "exit code");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('foo');
+
+    $test->run(args => '');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr/^foo$/,      "stdout");
+    like($test->stderr, qr/^$/,         "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('foo');
+    $neb->create('bar');
+
+    $test->run(args => '');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr/^foo bar$/,  "stdout");
+    like($test->stderr, qr/^$/,         "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('foo');
+    $neb->create('bar');
+
+    $test->run(args => '-l');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr/^foo\nbar\n$/,   "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('foo');
+    $neb->create('bar');
+
+    $test->run(args => '-1');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr/^foo\nbar\n$/,   "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('a/foo');
+
+    $test->run(args => '');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr||,               "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('a/foo');
+
+    $test->run(args => 'a');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr|^a/foo$|,        "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('a/foo');
+    $neb->create('a/bar');
+
+    $test->run(args => 'a');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr|^a/foo a/bar$|,  "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('a/foo');
+    $neb->create('foo');
+
+    $test->run(args => 'a');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr|^a/foo$|,        "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->setup;
+
+{
+    my $neb = Nebulous::Client->new(
+        proxy => $neb_url,
+    );
+    $neb->create('a/foo');
+    $neb->create('a/b/foo');
+
+    $test->run(args => 'a');
+
+    is($? >> 8, 0, "exit code");
+    like($test->stdout, qr|^a/foo$|,        "stdout");
+    like($test->stderr, qr/^$/,             "stderr");
+}
+
+Test::Nebulous->cleanup;
+
+sub missing_args
+{
+    my ($exit, $errstr) = @_;
+
+    is($? >> 8, $exit, "error code is: $exit");
+    like($test->stderr, qr/$errstr/, "error string is: $errstr");
+}
Index: trunk/Nebulous/t/conf/startup.pl.in
===================================================================
--- trunk/Nebulous/t/conf/startup.pl.in	(revision 23740)
+++ trunk/Nebulous/t/conf/startup.pl.in	(revision 23934)
@@ -12,11 +12,25 @@
 use Test::Nebulous;
 
+#$Apache::DBI::DEBUG = 1;
 Apache::DBI->connect_on_init( $NEB_DB, $NEB_USER, $NEB_PASS );
-Nebulous::Server::SOAP->new_on_init(
+Apache::DBI->setPingTimeOut($NEB_DB, 10);
+
+my $config = Nebulous::Server::Config->new(
+    trace       => 'all',
+);
+$config->add_db(
+    dbindex     => 0,
     dsn         => $NEB_DB,
     dbuser      => $NEB_USER,
     dbpasswd    => $NEB_PASS,
-    log_level   => 'all',
 );
+#$config->add_db(
+#    dbindex     => 1,
+#    dsn         => 'DBI:mysql:database=nebulous1:host=localhost',
+#    dbuser      => $dbuser,
+#    dbpasswd    => $dbpasswd,
+#);
+
+Nebulous::Server::SOAP->new_on_init($config);
 
 1;
