Index: trunk/Nebulous-Server/t/14_server_xattr.t
===================================================================
--- trunk/Nebulous-Server/t/14_server_xattr.t	(revision 18451)
+++ trunk/Nebulous-Server/t/14_server_xattr.t	(revision 24291)
@@ -8,5 +8,5 @@
 use warnings FATAL => qw( all );
 
-use Test::More tests => 36;
+use Test::More tests => 44;
 
 use lib qw( ./t ./lib );
@@ -28,15 +28,15 @@
     my $uri = $neb->create_object('foo');
 
-    ok($neb->setxattr_object('foo', 'bar', 'baz', 'create'), 'set object xattr');
+    ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr');
     {
         my $xattrs = $neb->listxattr_object('foo');
         is(scalar @$xattrs, 1, 'number of xattrs');
-        is(@$xattrs[0], 'bar', 'xattr name');
-    }
-
-    my $value = $neb->getxattr_object('foo', 'bar');
+        is(@$xattrs[0], 'user.bar', 'xattr name');
+    }
+
+    my $value = $neb->getxattr_object('foo', 'user.bar');
     is($value, 'baz', 'xattr value');
 
-    ok($neb->removexattr_object('foo', 'bar'), "remove object xattr");
+    ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr");
     {
         my $xattrs = $neb->listxattr_object('foo');
@@ -52,21 +52,21 @@
     my $uri = $neb->create_object('foo');
 
-    ok($neb->setxattr_object('foo', 'bar', 'baz', 'create'), 'set object xattr');
-    ok($neb->setxattr_object('foo', 'bonk', 'quix', 'create'), 'set object xattr');
+    ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr');
+    ok($neb->setxattr_object('foo', 'user.bonk', 'quix', 'create'), 'set object xattr');
     
     {
         my $xattrs = $neb->listxattr_object('foo');
         is(scalar @$xattrs, 2, 'number of xattrs');
-        is(@$xattrs[0], 'bar', 'xattr name');
-        is(@$xattrs[1], 'bonk', 'xattr name');
-    }
-
-    my $value = $neb->getxattr_object('foo', 'bar');
+        is(@$xattrs[0], 'user.bar', 'xattr name');
+        is(@$xattrs[1], 'user.bonk', 'xattr name');
+    }
+
+    my $value = $neb->getxattr_object('foo', 'user.bar');
     is($value, 'baz', 'xattr value');
-    $value = $neb->getxattr_object('foo', 'bonk');
+    $value = $neb->getxattr_object('foo', 'user.bonk');
     is($value, 'quix', 'xattr value');
 
-    ok($neb->removexattr_object('foo', 'bar'), "remove object xattr");
-    ok($neb->removexattr_object('foo', 'bonk'), "remove object xattr");
+    ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr");
+    ok($neb->removexattr_object('foo', 'user.bonk'), "remove object xattr");
     {
         my $xattrs = $neb->listxattr_object('foo');
@@ -82,17 +82,17 @@
     my $uri = $neb->create_object('foo');
 
-    ok($neb->setxattr_object('foo', 'bar', 'baz', 'create'), 'set object xattr');
-    ok($neb->setxattr_object('foo', 'bar', 'quix', 'replace'), 're-set object xattr');
+    ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr');
+    ok($neb->setxattr_object('foo', 'user.bar', 'quix', 'replace'), 're-set object xattr');
     
     {
         my $xattrs = $neb->listxattr_object('foo');
         is(scalar @$xattrs, 1, 'number of xattrs');
-        is(@$xattrs[0], 'bar', 'xattr name');
-    }
-
-    my $value = $neb->getxattr_object('foo', 'bar');
+        is(@$xattrs[0], 'user.bar', 'xattr name');
+    }
+
+    my $value = $neb->getxattr_object('foo', 'user.bar');
     is($value, 'quix', 'xattr value');
 
-    ok($neb->removexattr_object('foo', 'bar'), "remove object xattr");
+    ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr");
     {
         my $xattrs = $neb->listxattr_object('foo');
@@ -106,10 +106,21 @@
 
 eval {
-    $neb->setxattr_object('foo', 'bar', 'baz', 'create');
+    $neb->setxattr_object('foo', 'user.bar', 'baz', 'create');
 };
 like($@, qr/is valid object key/, "create xattr on non-existant key");
 
-eval {
-    $neb->setxattr_object('foo', 'bar', 'baz', 'replace');
+Test::Nebulous->setup;
+
+eval {
+    $neb->create_object('foo');
+
+    $neb->setxattr_object('foo', 'luser.bar', 'baz', 'create');
+};
+like($@, qr/xattr is in user. namespace/, "user. namspace");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->setxattr_object('foo', 'user.bar', 'baz', 'replace');
 };
 like($@, qr/is valid object key/, "replace xattr on non-existant key");
@@ -127,5 +138,5 @@
     $neb->create_object('foo');
 
-    $neb->setxattr_object('foo', 'bar');
+    $neb->setxattr_object('foo', 'user.bar');
 };
 like($@, qr/4 were expected/, "too few params");
@@ -136,5 +147,5 @@
     $neb->create_object('foo');
 
-    $neb->setxattr_object('foo', 'bar', 'baz');
+    $neb->setxattr_object('foo', 'user.bar', 'baz');
 };
 like($@, qr/4 were expected/, "too few params");
@@ -145,5 +156,5 @@
     $neb->create_object('foo');
 
-    $neb->setxattr_object('foo', 'bar', 'baz', 'create', 'quix');
+    $neb->setxattr_object('foo', 'user.bar', 'baz', 'create', 'quix');
 };
 like($@, qr/4 were expected/, "too many params");
@@ -162,7 +173,16 @@
 eval {
     $neb->create_object('foo');
-    $neb->getxattr_object('foo', 'bar');
-};
-like($@, qr|xattr neb:///foo:bar does not exist|,
+
+    $neb->getxattr_object('foo', 'luser.bar');
+};
+like($@, qr/xattr is in user. namespace/, "user. namespace");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->create_object('foo');
+    $neb->getxattr_object('foo', 'user.bar');
+};
+like($@, qr|xattr neb:///foo:user.bar does not exist|,
     "get xattr from non-existant xattr key");
 
@@ -188,5 +208,5 @@
     $neb->create_object('foo');
 
-    $neb->getxattr_object('foo', 'bar', 'baz');
+    $neb->getxattr_object('foo', 'user.bar', 'baz');
 };
 like($@, qr/2 were expected/, "too many params");
@@ -212,3 +232,55 @@
 like($@, qr/1 was expected/, "too many params");
 
+# removexattr_object
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->removexattr_object('foo', 'user.bar');
+};
+like($@, qr/is valid object key/, "remove xattr from non-existant nebulous key");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->create_object('foo');
+
+    $neb->getxattr_object('foo', 'luser.bar');
+};
+like($@, qr/xattr is in user. namespace/, "user. namespace");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->create_object('foo');
+    $neb->removexattr_object('foo', 'user.bar');
+};
+like($@, qr|xattr neb:///foo:user.bar does not exist|,
+    "remove xattr from non-existant xattr key");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->removexattr_object();
+};
+like($@, qr/2 were expected/, "no params");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->create_object('foo');
+
+    $neb->removexattr_object('foo');
+};
+like($@, qr/2 were expected/, "too few params");
+
+Test::Nebulous->setup;
+
+eval {
+    $neb->create_object('foo');
+
+    $neb->removexattr_object('foo', 'user.bar', 'baz');
+};
+like($@, qr/2 were expected/, "too many params");
+
 Test::Nebulous->cleanup;
