Changeset 24291
- Timestamp:
- Jun 1, 2009, 3:53:59 PM (17 years ago)
- Location:
- trunk/Nebulous-Server
- Files:
-
- 3 edited
-
Changes (modified) (1 diff)
-
lib/Nebulous/Server.pm (modified) (5 diffs)
-
t/14_server_xattr.t (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Nebulous-Server/Changes
r24276 r24291 2 2 3 3 0.17 4 - restrict creation/modification/remove of xattrs to the user.* namespace 4 5 - add chmod_object() method 5 6 - retry database transactions when a deadlock is detected -
trunk/Nebulous-Server/lib/Nebulous/Server.pm
r24276 r24291 740 740 } 741 741 742 # check to see if the user.mode xattr exists 743 742 744 $log->debug("leaving"); 743 745 … … 982 984 { 983 985 type => SCALAR, 986 callbacks => { 987 'xattr is in user. namespace' 988 => sub { ($_[0]) =~ qr/^user\./ }, 989 }, 984 990 }, 985 991 { … … 1065 1071 { 1066 1072 type => SCALAR, 1073 callbacks => { 1074 'xattr is in user. namespace' 1075 => sub { ($_[0]) =~ qr/^user\./ }, 1076 }, 1067 1077 }, 1068 1078 ); … … 1161 1171 { 1162 1172 type => SCALAR, 1173 callbacks => { 1174 'xattr is in user. namespace' 1175 => sub { ($_[0]) =~ qr/^user\./ }, 1176 }, 1163 1177 }, 1164 1178 ); … … 1180 1194 $query->finish; 1181 1195 1196 # no rows affected means the xattr did not exist 1197 if ($rows == 0) { 1198 $log->logdie( "xattr $key:$name does not exist" ); 1199 } 1200 1182 1201 # if we affected more then one row something very bad has happened. 1183 unless ($rows ==1) {1202 if ($rows > 1) { 1184 1203 $log->logdie( "affected row count is $rows instead of 1" ); 1185 1204 } -
trunk/Nebulous-Server/t/14_server_xattr.t
r18451 r24291 8 8 use warnings FATAL => qw( all ); 9 9 10 use Test::More tests => 36;10 use Test::More tests => 44; 11 11 12 12 use lib qw( ./t ./lib ); … … 28 28 my $uri = $neb->create_object('foo'); 29 29 30 ok($neb->setxattr_object('foo', ' bar', 'baz', 'create'), 'set object xattr');30 ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr'); 31 31 { 32 32 my $xattrs = $neb->listxattr_object('foo'); 33 33 is(scalar @$xattrs, 1, 'number of xattrs'); 34 is(@$xattrs[0], ' bar', 'xattr name');35 } 36 37 my $value = $neb->getxattr_object('foo', ' bar');34 is(@$xattrs[0], 'user.bar', 'xattr name'); 35 } 36 37 my $value = $neb->getxattr_object('foo', 'user.bar'); 38 38 is($value, 'baz', 'xattr value'); 39 39 40 ok($neb->removexattr_object('foo', ' bar'), "remove object xattr");40 ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr"); 41 41 { 42 42 my $xattrs = $neb->listxattr_object('foo'); … … 52 52 my $uri = $neb->create_object('foo'); 53 53 54 ok($neb->setxattr_object('foo', ' bar', 'baz', 'create'), 'set object xattr');55 ok($neb->setxattr_object('foo', ' bonk', 'quix', 'create'), 'set object xattr');54 ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr'); 55 ok($neb->setxattr_object('foo', 'user.bonk', 'quix', 'create'), 'set object xattr'); 56 56 57 57 { 58 58 my $xattrs = $neb->listxattr_object('foo'); 59 59 is(scalar @$xattrs, 2, 'number of xattrs'); 60 is(@$xattrs[0], ' bar', 'xattr name');61 is(@$xattrs[1], ' bonk', 'xattr name');62 } 63 64 my $value = $neb->getxattr_object('foo', ' bar');60 is(@$xattrs[0], 'user.bar', 'xattr name'); 61 is(@$xattrs[1], 'user.bonk', 'xattr name'); 62 } 63 64 my $value = $neb->getxattr_object('foo', 'user.bar'); 65 65 is($value, 'baz', 'xattr value'); 66 $value = $neb->getxattr_object('foo', ' bonk');66 $value = $neb->getxattr_object('foo', 'user.bonk'); 67 67 is($value, 'quix', 'xattr value'); 68 68 69 ok($neb->removexattr_object('foo', ' bar'), "remove object xattr");70 ok($neb->removexattr_object('foo', ' bonk'), "remove object xattr");69 ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr"); 70 ok($neb->removexattr_object('foo', 'user.bonk'), "remove object xattr"); 71 71 { 72 72 my $xattrs = $neb->listxattr_object('foo'); … … 82 82 my $uri = $neb->create_object('foo'); 83 83 84 ok($neb->setxattr_object('foo', ' bar', 'baz', 'create'), 'set object xattr');85 ok($neb->setxattr_object('foo', ' bar', 'quix', 'replace'), 're-set object xattr');84 ok($neb->setxattr_object('foo', 'user.bar', 'baz', 'create'), 'set object xattr'); 85 ok($neb->setxattr_object('foo', 'user.bar', 'quix', 'replace'), 're-set object xattr'); 86 86 87 87 { 88 88 my $xattrs = $neb->listxattr_object('foo'); 89 89 is(scalar @$xattrs, 1, 'number of xattrs'); 90 is(@$xattrs[0], ' bar', 'xattr name');91 } 92 93 my $value = $neb->getxattr_object('foo', ' bar');90 is(@$xattrs[0], 'user.bar', 'xattr name'); 91 } 92 93 my $value = $neb->getxattr_object('foo', 'user.bar'); 94 94 is($value, 'quix', 'xattr value'); 95 95 96 ok($neb->removexattr_object('foo', ' bar'), "remove object xattr");96 ok($neb->removexattr_object('foo', 'user.bar'), "remove object xattr"); 97 97 { 98 98 my $xattrs = $neb->listxattr_object('foo'); … … 106 106 107 107 eval { 108 $neb->setxattr_object('foo', ' bar', 'baz', 'create');108 $neb->setxattr_object('foo', 'user.bar', 'baz', 'create'); 109 109 }; 110 110 like($@, qr/is valid object key/, "create xattr on non-existant key"); 111 111 112 eval { 113 $neb->setxattr_object('foo', 'bar', 'baz', 'replace'); 112 Test::Nebulous->setup; 113 114 eval { 115 $neb->create_object('foo'); 116 117 $neb->setxattr_object('foo', 'luser.bar', 'baz', 'create'); 118 }; 119 like($@, qr/xattr is in user. namespace/, "user. namspace"); 120 121 Test::Nebulous->setup; 122 123 eval { 124 $neb->setxattr_object('foo', 'user.bar', 'baz', 'replace'); 114 125 }; 115 126 like($@, qr/is valid object key/, "replace xattr on non-existant key"); … … 127 138 $neb->create_object('foo'); 128 139 129 $neb->setxattr_object('foo', ' bar');140 $neb->setxattr_object('foo', 'user.bar'); 130 141 }; 131 142 like($@, qr/4 were expected/, "too few params"); … … 136 147 $neb->create_object('foo'); 137 148 138 $neb->setxattr_object('foo', ' bar', 'baz');149 $neb->setxattr_object('foo', 'user.bar', 'baz'); 139 150 }; 140 151 like($@, qr/4 were expected/, "too few params"); … … 145 156 $neb->create_object('foo'); 146 157 147 $neb->setxattr_object('foo', ' bar', 'baz', 'create', 'quix');158 $neb->setxattr_object('foo', 'user.bar', 'baz', 'create', 'quix'); 148 159 }; 149 160 like($@, qr/4 were expected/, "too many params"); … … 162 173 eval { 163 174 $neb->create_object('foo'); 164 $neb->getxattr_object('foo', 'bar'); 165 }; 166 like($@, qr|xattr neb:///foo:bar does not exist|, 175 176 $neb->getxattr_object('foo', 'luser.bar'); 177 }; 178 like($@, qr/xattr is in user. namespace/, "user. namespace"); 179 180 Test::Nebulous->setup; 181 182 eval { 183 $neb->create_object('foo'); 184 $neb->getxattr_object('foo', 'user.bar'); 185 }; 186 like($@, qr|xattr neb:///foo:user.bar does not exist|, 167 187 "get xattr from non-existant xattr key"); 168 188 … … 188 208 $neb->create_object('foo'); 189 209 190 $neb->getxattr_object('foo', ' bar', 'baz');210 $neb->getxattr_object('foo', 'user.bar', 'baz'); 191 211 }; 192 212 like($@, qr/2 were expected/, "too many params"); … … 212 232 like($@, qr/1 was expected/, "too many params"); 213 233 234 # removexattr_object 235 236 Test::Nebulous->setup; 237 238 eval { 239 $neb->removexattr_object('foo', 'user.bar'); 240 }; 241 like($@, qr/is valid object key/, "remove xattr from non-existant nebulous key"); 242 243 Test::Nebulous->setup; 244 245 eval { 246 $neb->create_object('foo'); 247 248 $neb->getxattr_object('foo', 'luser.bar'); 249 }; 250 like($@, qr/xattr is in user. namespace/, "user. namespace"); 251 252 Test::Nebulous->setup; 253 254 eval { 255 $neb->create_object('foo'); 256 $neb->removexattr_object('foo', 'user.bar'); 257 }; 258 like($@, qr|xattr neb:///foo:user.bar does not exist|, 259 "remove xattr from non-existant xattr key"); 260 261 Test::Nebulous->setup; 262 263 eval { 264 $neb->removexattr_object(); 265 }; 266 like($@, qr/2 were expected/, "no params"); 267 268 Test::Nebulous->setup; 269 270 eval { 271 $neb->create_object('foo'); 272 273 $neb->removexattr_object('foo'); 274 }; 275 like($@, qr/2 were expected/, "too few params"); 276 277 Test::Nebulous->setup; 278 279 eval { 280 $neb->create_object('foo'); 281 282 $neb->removexattr_object('foo', 'user.bar', 'baz'); 283 }; 284 like($@, qr/2 were expected/, "too many params"); 285 214 286 Test::Nebulous->cleanup;
Note:
See TracChangeset
for help on using the changeset viewer.
