Changeset 41172 for trunk/Nebulous-Server/t
- Timestamp:
- Nov 27, 2019, 12:04:14 PM (7 years ago)
- Location:
- trunk/Nebulous-Server/t
- Files:
-
- 8 edited
- 1 copied
-
03_server_setup.t (modified) (1 diff)
-
04_server_create_object.t (modified) (5 diffs)
-
05_server_replicate_object.t (modified) (6 diffs)
-
08_server_find_instances.t (modified) (10 diffs)
-
11_server_is_valid_volume_name.t (modified) (2 diffs)
-
15_server_xattr.t (modified) (1 diff)
-
16_mounts.t (modified) (3 diffs)
-
18_server_chmod_object.t (modified) (3 diffs)
-
20_server_find_objects_wildcard.t (copied) (copied from branches/eam_branches/ipp-20191011/Nebulous-Server/t/20_server_find_objects_wildcard.t )
Legend:
- Unmodified
- Added
- Removed
-
trunk/Nebulous-Server/t/03_server_setup.t
r24546 r41172 14 14 use Nebulous::Server; 15 15 use Test::Nebulous; 16 17 Test::Nebulous->show_setup; 18 die "test"; 16 19 17 20 Test::Nebulous->setup; -
trunk/Nebulous-Server/t/04_server_create_object.t
r24356 r41172 30 30 31 31 Test::Nebulous->setup; 32 33 32 { 34 33 # key … … 40 39 uri_scheme_ok($uri, 'file'); 41 40 42 SKIP: { 43 skip "requires xattr support", 1 unless $test_xattr; 44 is(getfattr($path, 'user.nebulous_key'), 'foo', 'user.nebulous_key xattr'); 45 } 46 } 47 48 Test::Nebulous->setup; 49 41 SKIP: { 42 skip "requires xattr support", 1 unless $test_xattr; 43 is(getfattr($path, 'user.nebulous_key'), 'foo', 'user.nebulous_key xattr'); 44 } 45 } 46 47 Test::Nebulous->setup; 50 48 { 51 49 # key … … 57 55 uri_scheme_ok($uri, 'file'); 58 56 59 SKIP: {60 skip "requires xattr support", 1 unless $test_xattr;61 is(getfattr($path, 'user.nebulous_key'), 'foo', 'user.nebulous_key xattr');62 }57 SKIP: { 58 skip "requires xattr support", 1 unless $test_xattr; 59 is(getfattr($path, 'user.nebulous_key'), 'foo', 'user.nebulous_key xattr'); 60 } 63 61 } 64 62 … … 528 526 $neb->create_object("foo", '~node07'); 529 527 }; 530 like($@, qr/node07 is not available/, "request volume thisis full");528 like($@, qr/node07 is not available/, "request volume which is full"); 531 529 532 530 Test::Nebulous->setup; … … 535 533 $neb->create_object("neb://~node07/foo"); 536 534 }; 537 like($@, qr/node07 is not available/, "request volume thisis full");535 like($@, qr/node07 is not available/, "request volume which is full"); 538 536 539 537 Test::Nebulous->setup; -
trunk/Nebulous-Server/t/05_server_replicate_object.t
r24995 r41172 8 8 use warnings FATAL => qw( all ); 9 9 10 use Test::More tests => 25;10 use Test::More tests => 43; 11 11 12 12 use lib qw( ./t ./lib ); … … 28 28 29 29 Test::Nebulous->setup; 30 31 30 { 32 31 # key … … 45 44 46 45 Test::Nebulous->setup; 47 48 46 { 49 47 # key, $volume … … 62 60 63 61 Test::Nebulous->setup; 64 65 62 { 66 63 # key, $volume is undef … … 79 76 80 77 Test::Nebulous->setup; 81 82 78 { 83 79 # key, $volume … … 147 143 } 148 144 145 # hard_volume tests: 146 147 # replication with hard_volume: 148 Test::Nebulous->setup; 149 { 150 my @nodedirs = Test::Nebulous->get_node_dirs(); 151 152 # checking on replicate_object: hard_volume as node target 153 my $uri1 = $neb->create_object("foo", "~node01"); 154 my $uri2 = $neb->replicate_object("foo", "~node02"); 155 156 my $locations = $neb->find_instances("foo"); 157 my $Nloc = @$locations; 158 159 is($Nloc, 2, "found 2 instances"); 160 161 my $loc1 = $locations->[0]; 162 my $loc2 = $locations->[1]; 163 164 like($loc1, qr/$nodedirs[0]/, "instance matches expected node"); 165 like($loc2, qr/$nodedirs[1]/, "instance matches expected node"); 166 } 167 168 # replication to unknown volume: should succeed 169 Test::Nebulous->setup; 170 { 171 my @nodedirs = Test::Nebulous->get_node_dirs(); 172 173 # checking on replicate_object, does this logic make sense? 174 my $uri1 = $neb->create_object("foo", "~node01"); 175 my $uri2 = $neb->replicate_object("foo", "dummy"); 176 177 my $locations = $neb->find_instances("foo"); 178 my $Nloc = @$locations; 179 180 is($Nloc, 2, "found 2 instances"); 181 182 my $loc1 = $locations->[0]; 183 my $loc2 = $locations->[1]; 184 185 like($loc1, qr/$nodedirs[0]/, "instance matches expected node"); 186 uri_scheme_ok($loc2, 'file'); 187 } 188 189 # replication to unknown volume with hard_volume: should fail 190 Test::Nebulous->setup; 191 eval { 192 my @nodedirs = Test::Nebulous->get_node_dirs(); 193 194 # checking on replicate_object, does this logic make sense? 195 my $uri1 = $neb->create_object("foo", "~node01"); 196 my $uri2 = $neb->replicate_object("foo", "~dummy"); 197 198 my $locations = $neb->find_instances("foo"); 199 }; 200 like($@, qr/is not a valid volume name/, "replicate to unknown node with hard_volume should fail"); 201 202 # replication to unavailable volume: should succeed 203 Test::Nebulous->setup; 204 { 205 my @nodedirs = Test::Nebulous->get_node_dirs(); 206 207 # checking on replicate_object, does this logic make sense? 208 my $uri1 = $neb->create_object("foo", "~node01"); 209 my $uri2 = $neb->replicate_object("foo", "node04"); 210 211 my $locations = $neb->find_instances("foo"); 212 my $Nloc = @$locations; 213 214 is($Nloc, 2, "found 2 instances"); 215 216 my $loc1 = $locations->[0]; 217 my $loc2 = $locations->[1]; 218 219 like($loc1, qr/$nodedirs[0]/, "instance matches expected node"); 220 uri_scheme_ok($loc2, 'file'); 221 } 222 223 # replication to unavailable volume with hard_volume: should fail 224 Test::Nebulous->setup; 225 eval { 226 my @nodedirs = Test::Nebulous->get_node_dirs(); 227 228 # checking on replicate_object, does this logic make sense? 229 my $uri1 = $neb->create_object("foo", "~node01"); 230 my $uri2 = $neb->replicate_object("foo", "~node04"); 231 232 my $locations = $neb->find_instances("foo"); 233 }; 234 like($@, qr/is not available/, "replicate to unknown node with hard_volume should fail"); 235 236 ### END hard_volume tests 237 238 ### location-aware tests (do we respect the cab_id / vol_id exclusions?) 239 240 # here are the volume definitions (Test/Nebulous.pm): 241 # name : vol_id : cab_id : site_id : xattr 242 # node01 : 1 : 1 : 1 : 0 243 # node02 : 2 : 2 : 1 : 0 244 # node03 : 3 : 3 : 2 : 0 245 # node04 : 4 : 1 : 1 : 0 246 # node05 : 5 : 1 : 1 : 0 247 # node06 : 6 : 1 : 1 : 0 248 # node07 : 7 : 1 : 1 : 0 249 # node08 : 8 : 4 : 2 : 0 250 251 # replication without volume 252 Test::Nebulous->setup; 253 { 254 my @nodedirs = Test::Nebulous->get_node_dirs(); 255 256 # checking on replicate_object: hard_volume as node target 257 my $uri1 = $neb->create_object("foo", "~node01"); 258 my $uri2 = $neb->replicate_object("foo"); 259 260 my $locations = $neb->find_instances("foo"); 261 my $Nloc = @$locations; 262 263 is($Nloc, 2, "found 2 instances"); 264 265 my $loc1 = $locations->[0]; 266 my $loc2 = $locations->[1]; 267 268 # if the volume is not explicitly specified, then the first copy 269 # should go to a different volume, cabinet, and site 270 # if first is one node01, replication should go to node03 or node08 271 # since those both have different site_id values 272 like($loc1, qr/$nodedirs[0]/, "instance matches expected node"); 273 274 my $isnode03 = $loc2 =~ m/$nodedirs[2]/; 275 my $isnode08 = $loc2 =~ m/$nodedirs[7]/; 276 ok($isnode03 || $isnode08, "instance matches expected node"); 277 } 278 279 # replication without volume 280 Test::Nebulous->setup; 281 { 282 my @nodedirs = Test::Nebulous->get_node_dirs(); 283 284 # checking on replicate_object, does this logic make sense? 285 my $uri1 = $neb->create_object("foo", "~node03"); 286 my $uri2 = $neb->replicate_object("foo"); 287 288 my $locations = $neb->find_instances("foo"); 289 my $Nloc = @$locations; 290 291 is($Nloc, 2, "found 2 instances"); 292 293 my $loc1 = $locations->[0]; 294 my $loc2 = $locations->[1]; 295 296 # if the volume is not explicitly specified, then the first copy 297 # should go to a different volume, cabinet, and site 298 # if first is one node03, replication should go to node01 or node02 299 # since those both have different site_id values 300 like($loc1, qr/$nodedirs[2]/, "instance matches expected node"); 301 302 my $isnode01 = $loc2 =~ m/$nodedirs[0]/; 303 my $isnode02 = $loc2 =~ m/$nodedirs[1]/; 304 ok($isnode01 || $isnode02, "instance matches expected node"); 305 } 306 149 307 Test::Nebulous->setup; 150 308 -
trunk/Nebulous-Server/t/08_server_find_instances.t
r24362 r41172 8 8 use warnings FATAL => qw( all ); 9 9 10 use Test::More tests => 19;10 use Test::More tests => 44; 11 11 12 12 use lib qw( ./t ./lib ); … … 22 22 ); 23 23 24 Test::Nebulous->setup; 25 24 # XXX previously, the logic was: if we request a hard volume location 25 # using ~node, then we would give an error if no data is available except on that node. 26 27 # the code has been modified so that the requested storage object is provided if possible, 28 # even if the apparently "hard" target did not exist. 29 30 Test::Nebulous->setup; 31 Test::Nebulous->cleanup; # make sure the database is reset before running any tests 32 33 # for (my $i = 0; $i < $Nloc; $i++) { 34 # my $loc = $locations->[$i]; 35 # print "location: $loc\n"; 36 #} 37 38 Test::Nebulous->setup; 26 39 { 27 40 # key … … 35 48 36 49 Test::Nebulous->setup; 37 38 50 { 39 51 # key … … 49 61 50 62 Test::Nebulous->setup; 51 52 63 { 53 64 # key, volume … … 61 72 62 73 Test::Nebulous->setup; 63 64 74 { 65 75 # key, volume … … 73 83 74 84 Test::Nebulous->setup; 75 76 85 { 77 86 # key, volume … … 85 94 86 95 Test::Nebulous->setup; 87 88 96 { 89 97 # key … … 98 106 } 99 107 100 # object exists but instance is on a different volume 101 Test::Nebulous->setup; 102 108 # request from a hard_volume returns an instance which is not on the hard volume if available 109 Test::Nebulous->setup; 103 110 eval { 104 111 # key, volume 105 112 my $uri = $neb->create_object('foo', '~node01'); 106 107 113 my $locations = $neb->find_instances('foo', '~node02'); 108 }; 109 like($@, qr/no instances on storage volume/, 'instances on a different volume'); 114 115 uri_scheme_ok($locations->[0], 'file'); 116 is($uri, $locations->[0], "URIs match"); 117 }; 118 is($@, "", "instance on different node (as hard_volume) returned"); 119 120 # request from a hard_volume returns an instance which is not on the hard volume if available 121 Test::Nebulous->setup; 122 eval { 123 # key, volume 124 my $uri = $neb->create_object('foo', '~node01'); 125 my $locations = $neb->find_instances('foo', '~node02'); 126 127 uri_scheme_ok($locations->[0], 'file'); 128 is($uri, $locations->[0], "URIs match"); 129 }; 130 is($@, "", "instance on different node (as hard_volume) returned"); 131 132 ### TESTS FOR INSTANCE ON INVALID NODE 133 diag ("TESTS FOR INSTANCE ON INVALID NODE"); 134 135 # request from a soft_volume for an instance which is on an invalid node (find_invalid = 1) [SOFT, 1] 136 Test::Nebulous->setup; 137 eval { 138 # key, volume 139 my $uri = $neb->create_object('foo', '~node02'); 140 Test::Nebulous->switch_node_state; 141 142 my $locations = $neb->find_instances('foo', 'node02', 1); 143 uri_scheme_ok($locations->[0], 'file'); 144 is($uri, $locations->[0], "URIs match"); 145 }; 146 is($@, "", "instance on invalid node (as soft_volume) returned with find_invalid = 1"); 147 148 # request from a soft_volume for an instance which is on an invalid node (find_invalid = 0) [SOFT, 0] 149 Test::Nebulous->setup; 150 eval { 151 # key, volume 152 my $uri = $neb->create_object('foo', '~node02'); 153 Test::Nebulous->switch_node_state; 154 155 my $locations = $neb->find_instances('foo', 'node02', 0); 156 }; 157 like($@, qr/database error/, "instance on invalid node (as soft_volume) not returned (find_invalid = 0)"); 158 159 # request from a hard_volume for an instance which is on an invalid node (find_instance not supplied) [SOFT, X] 160 Test::Nebulous->setup; 161 eval { 162 # key, volume 163 my $uri = $neb->create_object('foo', '~node02'); 164 Test::Nebulous->switch_node_state; 165 166 my $locations = $neb->find_instances('foo', 'node02'); 167 }; 168 like($@, qr/no instances available for key/, "instance on invalid node (as soft_volume) not returned (find_invalid not set)"); 169 170 # request from a hard_volume for an instance which is on an invalid node (find_invalid = 1) [HARD, 1] 171 Test::Nebulous->setup; 172 eval { 173 # key, volume 174 my $uri = $neb->create_object('foo', '~node02'); 175 Test::Nebulous->switch_node_state; 176 177 my $locations = $neb->find_instances('foo', '~node02', 1); 178 uri_scheme_ok($locations->[0], 'file'); 179 is($uri, $locations->[0], "URIs match"); 180 }; 181 is($@, "", "instance on invalid node (as hard_volume) returned with find_invalid = 1"); 182 183 # request from a hard_volume for an instance which is on an invalid node (find_invalid = 0) [HARD, 0] 184 Test::Nebulous->setup; 185 eval { 186 # key, volume 187 my $uri = $neb->create_object('foo', '~node02'); 188 Test::Nebulous->switch_node_state; 189 190 my $locations = $neb->find_instances('foo', '~node02', 0); 191 }; 192 like($@, qr/no instances on storage volume/, "instance on invalid node (as hard_volume) not returned (find_invalid = 0)"); 193 194 # request from a hard_volume for an instance which is on an invalid node [HARD, X] 195 Test::Nebulous->setup; 196 eval { 197 # key, volume 198 my $uri = $neb->create_object('foo', '~node02'); 199 Test::Nebulous->switch_node_state; 200 201 my $locations = $neb->find_instances('foo', '~node02'); 202 }; 203 like($@, qr/no instances on storage volume/, "instance on invalid node (as hard_volume) not returned (find_invalid not set)"); 204 205 #### TESTING the instance proximity analysis 206 Test::Nebulous->setup; 207 { 208 my @nodedirs = Test::Nebulous->get_node_dirs(); 209 210 # place 4 instances on specific nodes (hard targets works): 211 my $uri1 = $neb->create_object("foo", "~node01"); 212 my $uri2 = $neb->replicate_object("foo", "~node02"); 213 my $uri3 = $neb->replicate_object("foo", "~node03"); 214 my $uri4 = $neb->replicate_object("foo", "~node08"); 215 216 my $locations = $neb->find_instances("foo", "node01"); 217 my $Nloc = @$locations; 218 219 is($Nloc, 4, "found 4 instances"); 220 221 my $loc1 = $locations->[0]; 222 my $loc2 = $locations->[1]; 223 my $loc3 = $locations->[2]; 224 my $loc4 = $locations->[3]; 225 226 # choosing instance relative to node01 yields: 227 like($loc1, qr/$nodedirs[0]/, "node01 is closest to node01"); 228 like($loc2, qr/$nodedirs[1]/, "node02 is 2nd closest to node01"); 229 like($loc3, qr/$nodedirs[2]/, "node03 is 3rd closest to node01"); 230 like($loc4, qr/$nodedirs[7]/, "node08 is 4th closest to node01"); 231 } 232 233 #### TESTING the instance proximity analysis 234 Test::Nebulous->setup; 235 { 236 my @nodedirs = Test::Nebulous->get_node_dirs(); 237 238 # place 4 instances on specific nodes (hard targets works): 239 my $uri1 = $neb->create_object("foo", "~node01"); 240 my $uri2 = $neb->replicate_object("foo", "~node02"); 241 my $uri3 = $neb->replicate_object("foo", "~node03"); 242 my $uri4 = $neb->replicate_object("foo", "~node08"); 243 244 my $locations = $neb->find_instances("foo", "node03"); 245 my $Nloc = @$locations; 246 247 is($Nloc, 4, "found 4 instances"); 248 249 my $loc1 = $locations->[0]; # 250 my $loc2 = $locations->[1]; # 251 my $loc3 = $locations->[2]; # 252 my $loc4 = $locations->[3]; # 253 254 # choosing instance relative to node01 yields: 255 like($loc1, qr/$nodedirs[2]/, "node03 is closest to node03"); 256 like($loc2, qr/$nodedirs[7]/, "node08 is 2nd closest to node03"); 257 like($loc3, qr/$nodedirs[1]/, "node02 is 3rd closest to node03"); 258 like($loc4, qr/$nodedirs[0]/, "node08 is 4th closest to node03"); 259 } 260 261 ######## 110 262 111 263 Test::Nebulous->setup; … … 125 277 126 278 Test::Nebulous->setup; 127 128 eval { 129 $neb->find_instances();130 };131 like($@, qr/1 - 2 were expected/, "no params"); 279 eval { 280 my $locations = $neb->find_instances(); 281 }; 282 like($@, qr/1 - 3 were expected/, "no params"); 283 # note the new API expects 1-3 parameters 132 284 133 285 Test::Nebulous->setup; … … 135 287 eval { 136 288 $neb->create_object('foo'); 137 $neb->find_instances('foo', 'node01', 3); 138 }; 139 like($@, qr/1 - 2 were expected/, "too many params"); 289 $neb->find_instances('foo', 'node01', 3, 5); 290 }; 291 like($@, qr/1 - 3 were expected/, "too many params"); 292 # note the new API expects 1-3 parameters 140 293 141 294 Test::Nebulous->cleanup; -
trunk/Nebulous-Server/t/11_server_is_valid_volume_name.t
r24356 r41172 8 8 use warnings FATAL => qw( all ); 9 9 10 use Test::More tests => 3;10 use Test::More tests => 5; 11 11 12 12 use lib qw( ./t ./lib ); … … 31 31 Test::Nebulous->setup; 32 32 33 is($neb->_is_valid_volume_name('foo', 'node99'), undef, "invalid volume name"); 33 is($neb->_is_valid_volume_name('foo', 'node99'), 0, "invalid volume name"); 34 35 Test::Nebulous->setup; 36 37 # key does not need to exist (is hashed to select db server) 38 ok($neb->_is_valid_volume_name('bax', 'node01'), "valid volume name"); 39 40 Test::Nebulous->setup; 41 42 # 'any' should always be a valid name 43 ok($neb->_is_valid_volume_name('foo', 'any'), "valid volume name"); 34 44 35 45 Test::Nebulous->cleanup; -
trunk/Nebulous-Server/t/15_server_xattr.t
r24356 r41172 184 184 $neb->getxattr_object('foo', 'user.bar'); 185 185 }; 186 like($@, qr|xattr neb:///foo:user.bar does not exist|, 187 "get xattr from non-existant xattr key"); 186 like($@, qr|xattr neb:///foo:user.bar does not exist|, "get xattr from non-existant xattr key"); 188 187 189 188 Test::Nebulous->setup; -
trunk/Nebulous-Server/t/16_mounts.t
r24356 r41172 28 28 my $mounts = $neb->mounts(); 29 29 30 is(scalar @$mounts, 7, "number of rows");30 is(scalar @$mounts, 8, "number of rows"); 31 31 32 32 my %row; … … 35 35 = @{$mounts->[0]}; 36 36 37 is($row{total}, 100000000000 );38 is($row{used}, 100000000 );39 is($row{vol_id}, 1 );40 is($row{name}, "node01" );41 is($row{host}, "node01" );42 is($row{allocate}, 1 );43 is($row{available}, 1 );44 is($row{xattr}, 0 );37 is($row{total}, 100000000000, "total bytes"); 38 is($row{used}, 100000000, "used bytes"); 39 is($row{vol_id}, 1, "vol id"); 40 is($row{name}, "node01", "name"); 41 is($row{host}, "node01", "host"); 42 is($row{allocate}, 1, "is allocated"); 43 is($row{available}, 1, "is available"); 44 is($row{xattr}, 0, "has no xattr"); 45 45 46 46 # 2nd row … … 48 48 = @{$mounts->[1]}; 49 49 50 is($row{total}, 100000000000 );51 is($row{used}, 1000000000 );52 is($row{vol_id}, 2 );53 is($row{name}, "node02" );54 is($row{host}, "node02" );55 is($row{allocate}, 1 );56 is($row{available}, 1 );57 is($row{xattr}, 0 );50 is($row{total}, 100000000000, "total bytes"); 51 is($row{used}, 1000000000, "used bytes"); 52 is($row{vol_id}, 2, "vol id"); 53 is($row{name}, "node02", "name"); 54 is($row{host}, "node02", "host"); 55 is($row{allocate}, 1, "is allocated"); 56 is($row{available}, 1, "is available"); 57 is($row{xattr}, 0, "has no xattr"); 58 58 } 59 59 -
trunk/Nebulous-Server/t/18_server_chmod_object.t
r24356 r41172 38 38 is($mode, 0440, "returned mode"); 39 39 is($neb->getxattr_object($key, 'user.mode'), 0440, "xattr user.mode"); 40 41 # reset to 600 so the user can delete the file and /tmp entry 42 chmod(0600, $path); 40 43 } 41 44 … … 50 53 my $mode = $neb->chmod_object($key, 0440); 51 54 52 my $st1 = stat(URI->new($uri1)->path); 53 my $st2 = stat(URI->new($uri2)->path); 55 my $path1 = URI->new($uri1)->path; 56 my $path2 = URI->new($uri2)->path; 57 58 my $st1 = stat($path1); 59 my $st2 = stat($path2); 54 60 55 61 is($st1->mode &07777, 0440, "chmod() first instance"); … … 57 63 is($mode, 0440, "returned mode"); 58 64 is($neb->getxattr_object($key, 'user.mode'), 0440, "xattr user.mode"); 65 66 # reset to 600 so the user can delete the file and /tmp entry 67 chmod (0600, $path1); 68 chmod (0600, $path2); 59 69 } 60 70
Note:
See TracChangeset
for help on using the changeset viewer.
