| 362 // |
362 // |
| 363 // VFS Tests |
363 // VFS Tests |
| 364 // |
364 // |
| 365 /* ------------------------------------------------------------------------- */ |
365 /* ------------------------------------------------------------------------- */ |
| 366 |
366 |
| 367 UCX_TEST(test_vfs_open) { |
367 CX_TEST(test_vfs_open) { |
| 368 Session *sn = testutil_session(); |
368 Session *sn = testutil_session(); |
| 369 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
369 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
| 370 rq->vfs = testvfs_create(sn); |
370 rq->vfs = testvfs_create(sn); |
| 371 |
371 |
| 372 VFSContext *vfs = vfs_request_context(sn, rq); |
372 VFSContext *vfs = vfs_request_context(sn, rq); |
| 373 |
373 |
| 374 UCX_TEST_BEGIN; |
374 CX_TEST_DO { |
| 375 |
375 |
| 376 UCX_TEST_ASSERT(vfs, "vfs is NULL"); |
376 CX_TEST_ASSERT(vfs); |
| 377 |
377 |
| 378 SYS_FILE f1 = vfs_open(vfs, "/file1", O_CREAT); |
378 SYS_FILE f1 = vfs_open(vfs, "/file1", O_CREAT); |
| 379 UCX_TEST_ASSERT(f1, "f1 not opened"); |
379 CX_TEST_ASSERT(f1); |
| 380 |
380 |
| 381 SYS_FILE f2 = vfs_open(vfs, "/file1", 0); |
381 SYS_FILE f2 = vfs_open(vfs, "/file1", 0); |
| 382 UCX_TEST_ASSERT(f2, "f2 not opened"); |
382 CX_TEST_ASSERT(f2); |
| 383 |
383 |
| 384 UCX_TEST_END; |
384 } |
| 385 |
385 |
| 386 testutil_destroy_session(sn); |
386 testutil_destroy_session(sn); |
| 387 } |
387 } |
| 388 |
388 |
| 389 UCX_TEST(test_vfs_mkdir) { |
389 CX_TEST(test_vfs_mkdir) { |
| 390 Session *sn = testutil_session(); |
390 Session *sn = testutil_session(); |
| 391 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
391 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
| 392 rq->vfs = testvfs_create(sn); |
392 rq->vfs = testvfs_create(sn); |
| 393 |
393 |
| 394 VFSContext *vfs = vfs_request_context(sn, rq); |
394 VFSContext *vfs = vfs_request_context(sn, rq); |
| 395 |
395 |
| 396 UCX_TEST_BEGIN; |
396 CX_TEST_DO { |
| 397 |
397 |
| 398 int err = vfs_mkdir(vfs, "/dir"); |
398 int err = vfs_mkdir(vfs, "/dir"); |
| 399 UCX_TEST_ASSERT(err == 0, "error not 0"); |
399 CX_TEST_ASSERT(err == 0); |
| 400 |
400 |
| 401 SYS_FILE fd = vfs_open(vfs, "/dir", 0); |
401 SYS_FILE fd = vfs_open(vfs, "/dir", 0); |
| 402 UCX_TEST_ASSERT(fd, "no fd"); |
402 CX_TEST_ASSERT(fd); |
| 403 |
403 |
| 404 UCX_TEST_END; |
404 } |
| 405 |
405 |
| 406 testutil_destroy_session(sn); |
406 testutil_destroy_session(sn); |
| 407 } |
407 } |
| 408 |
408 |
| 409 UCX_TEST(test_vfs_opendir) { |
409 CX_TEST(test_vfs_opendir) { |
| 410 Session *sn = testutil_session(); |
410 Session *sn = testutil_session(); |
| 411 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
411 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
| 412 rq->vfs = testvfs_create(sn); |
412 rq->vfs = testvfs_create(sn); |
| 413 |
413 |
| 414 VFSContext *vfs = vfs_request_context(sn, rq); |
414 VFSContext *vfs = vfs_request_context(sn, rq); |
| 415 |
415 |
| 416 UCX_TEST_BEGIN; |
416 CX_TEST_DO { |
| 417 |
417 |
| 418 int err = vfs_mkdir(vfs, "/dir"); |
418 int err = vfs_mkdir(vfs, "/dir"); |
| 419 UCX_TEST_ASSERT(err == 0, "error not 0"); |
419 CX_TEST_ASSERT(err == 0); |
| 420 |
420 |
| 421 VFSDir *dir = vfs_opendir(vfs, "/dir"); |
421 VFSDir *dir = vfs_opendir(vfs, "/dir"); |
| 422 UCX_TEST_ASSERT(dir, "no dir"); |
422 CX_TEST_ASSERT(dir); |
| 423 |
423 |
| 424 UCX_TEST_END; |
424 } |
| 425 |
425 |
| 426 testutil_destroy_session(sn); |
426 testutil_destroy_session(sn); |
| 427 } |
427 } |
| 428 |
428 |
| 429 UCX_TEST(test_vfs_readdir) { |
429 CX_TEST(test_vfs_readdir) { |
| 430 Session *sn = testutil_session(); |
430 Session *sn = testutil_session(); |
| 431 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
431 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
| 432 rq->vfs = testvfs_create(sn); |
432 rq->vfs = testvfs_create(sn); |
| 433 |
433 |
| 434 VFSContext *vfs = vfs_request_context(sn, rq); |
434 VFSContext *vfs = vfs_request_context(sn, rq); |
| 435 |
435 |
| 436 UCX_TEST_BEGIN; |
436 CX_TEST_DO { |
| 437 |
437 |
| 438 int err = vfs_mkdir(vfs, "/dir"); |
438 int err = vfs_mkdir(vfs, "/dir"); |
| 439 UCX_TEST_ASSERT(err == 0, "error not 0"); |
439 CX_TEST_ASSERT(err == 0); |
| 440 |
440 |
| 441 // add some test file to /dir |
441 // add some test file to /dir |
| 442 UCX_TEST_ASSERT(vfs_open(vfs, "/dir/file1", O_CREAT), "creation of file1 failed"); |
442 CX_TEST_ASSERT(vfs_open(vfs, "/dir/file1", O_CREAT)); |
| 443 UCX_TEST_ASSERT(vfs_open(vfs, "/dir/file2", O_CREAT), "creation of file2 failed"); |
443 CX_TEST_ASSERT(vfs_open(vfs, "/dir/file2", O_CREAT)); |
| 444 UCX_TEST_ASSERT(vfs_open(vfs, "/dir/file3", O_CREAT), "creation of file3 failed"); |
444 CX_TEST_ASSERT(vfs_open(vfs, "/dir/file3", O_CREAT)); |
| 445 UCX_TEST_ASSERT(vfs_open(vfs, "/dir/file4", O_CREAT), "creation of file4 failed"); |
445 CX_TEST_ASSERT(vfs_open(vfs, "/dir/file4", O_CREAT)); |
| 446 |
446 |
| 447 VFSDir *dir = vfs_opendir(vfs, "/dir"); |
447 VFSDir *dir = vfs_opendir(vfs, "/dir"); |
| 448 UCX_TEST_ASSERT(dir, "dir not opened"); |
448 CX_TEST_ASSERT(dir); |
| 449 |
449 |
| 450 CxMap *files = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); |
450 CxMap *files = cxHashMapCreate(cxDefaultAllocator, CX_STORE_POINTERS, 8); |
| 451 |
451 |
| 452 VFSEntry entry; |
452 VFSEntry entry; |
| 453 while(vfs_readdir(dir, &entry)) { |
453 while(vfs_readdir(dir, &entry)) { |
| 454 cxMapPut(files, cx_hash_key_str(entry.name), dir); |
454 cxMapPut(files, cx_hash_key_str(entry.name), dir); |
| 455 } |
455 } |
| 456 |
456 |
| 457 UCX_TEST_ASSERT(cxMapSize(files)== 4, "wrong files count"); |
457 CX_TEST_ASSERT(cxMapSize(files)== 4); |
| 458 UCX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file1")), "file1 missing"); |
458 CX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file1"))); |
| 459 UCX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file2")), "file2 missing"); |
459 CX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file2"))); |
| 460 UCX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file3")), "file3 missing"); |
460 CX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file3"))); |
| 461 UCX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file4")), "file4 missing"); |
461 CX_TEST_ASSERT(cxMapGet(files, cx_hash_key_str("file4"))); |
| 462 |
462 |
| 463 cxMapFree(files); |
463 cxMapFree(files); |
| 464 |
464 |
| 465 UCX_TEST_END; |
465 } |
| 466 |
466 |
| 467 testutil_destroy_session(sn); |
467 testutil_destroy_session(sn); |
| 468 } |
468 } |
| 469 |
469 |
| 470 UCX_TEST(test_vfs_unlink) { |
470 CX_TEST(test_vfs_unlink) { |
| 471 Session *sn = testutil_session(); |
471 Session *sn = testutil_session(); |
| 472 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
472 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
| 473 rq->vfs = testvfs_create(sn); |
473 rq->vfs = testvfs_create(sn); |
| 474 |
474 |
| 475 VFSContext *vfs = vfs_request_context(sn, rq); |
475 VFSContext *vfs = vfs_request_context(sn, rq); |
| 476 |
476 |
| 477 UCX_TEST_BEGIN; |
477 CX_TEST_DO { |
| 478 // prepare test |
478 // prepare test |
| 479 int err; |
479 int err; |
| 480 err = vfs_mkdir(vfs, "/dir1"); |
480 err = vfs_mkdir(vfs, "/dir1"); |
| 481 UCX_TEST_ASSERT(err == 0, "mkdir 1: error not 0"); |
481 CX_TEST_ASSERT(err == 0); |
| 482 err = vfs_mkdir(vfs, "/dir2"); |
482 err = vfs_mkdir(vfs, "/dir2"); |
| 483 UCX_TEST_ASSERT(err == 0, "mkdir 1: error not 0"); |
483 CX_TEST_ASSERT(err == 0); |
| 484 |
484 |
| 485 SYS_FILE f1 = vfs_open(vfs, "/file1", O_CREAT); |
485 SYS_FILE f1 = vfs_open(vfs, "/file1", O_CREAT); |
| 486 UCX_TEST_ASSERT(f1, "f1 not opened"); |
486 CX_TEST_ASSERT(f1); |
| 487 |
487 |
| 488 SYS_FILE f2 = vfs_open(vfs, "/file2", O_CREAT); |
488 SYS_FILE f2 = vfs_open(vfs, "/file2", O_CREAT); |
| 489 UCX_TEST_ASSERT(f1, "f2 not opened"); |
489 CX_TEST_ASSERT(f1); |
| 490 |
490 |
| 491 SYS_FILE f3 = vfs_open(vfs, "/dir1/file3", O_CREAT); |
491 SYS_FILE f3 = vfs_open(vfs, "/dir1/file3", O_CREAT); |
| 492 UCX_TEST_ASSERT(f1, "f3 not opened"); |
492 CX_TEST_ASSERT(f1); |
| 493 |
493 |
| 494 // test unlink |
494 // test unlink |
| 495 err = vfs_unlink(vfs, "/file1"); |
495 err = vfs_unlink(vfs, "/file1"); |
| 496 UCX_TEST_ASSERT(err == 0, "unlink /file1 failed"); |
496 CX_TEST_ASSERT(err == 0); |
| 497 err = vfs_unlink(vfs, "/dir1/file3"); |
497 err = vfs_unlink(vfs, "/dir1/file3"); |
| 498 UCX_TEST_ASSERT(err == 0, "unlink /dir1/file3 failed"); |
498 CX_TEST_ASSERT(err == 0); |
| 499 |
499 |
| 500 err = vfs_unlink(vfs, "/filex"); |
500 err = vfs_unlink(vfs, "/filex"); |
| 501 UCX_TEST_ASSERT(err != 0, "unlink /filex should fail"); |
501 CX_TEST_ASSERT(err != 0); |
| 502 |
502 |
| 503 // check if files were removed |
503 // check if files were removed |
| 504 SYS_FILE o1 = vfs_open(vfs, "/file1", O_RDONLY); |
504 SYS_FILE o1 = vfs_open(vfs, "/file1", O_RDONLY); |
| 505 UCX_TEST_ASSERT(o1 == NULL, "/file1 not deleted"); |
505 CX_TEST_ASSERT(o1 == NULL); |
| 506 SYS_FILE o3 = vfs_open(vfs, "/dir1/file3", O_RDONLY); |
506 SYS_FILE o3 = vfs_open(vfs, "/dir1/file3", O_RDONLY); |
| 507 UCX_TEST_ASSERT(o1 == NULL, "/dir1/file3 not deleted"); |
507 CX_TEST_ASSERT(o1 == NULL); |
| 508 |
508 |
| 509 // file2 should still be there |
509 // file2 should still be there |
| 510 SYS_FILE o2 = vfs_open(vfs, "/file2", O_RDONLY); |
510 SYS_FILE o2 = vfs_open(vfs, "/file2", O_RDONLY); |
| 511 UCX_TEST_ASSERT(o2, "/file2 deleted"); |
511 CX_TEST_ASSERT(o2); |
| 512 |
512 |
| 513 // check if dir unlink fails |
513 // check if dir unlink fails |
| 514 err = vfs_unlink(vfs, "/dir1"); |
514 err = vfs_unlink(vfs, "/dir1"); |
| 515 UCX_TEST_ASSERT(err != 0, "unlink dir1 should fail"); |
515 CX_TEST_ASSERT(err != 0); |
| 516 |
516 |
| 517 UCX_TEST_END; |
517 } |
| 518 |
518 |
| 519 testutil_destroy_session(sn); |
519 testutil_destroy_session(sn); |
| 520 } |
520 } |
| 521 |
521 |
| 522 UCX_TEST(test_vfs_rmdir) { |
522 CX_TEST(test_vfs_rmdir) { |
| 523 Session *sn = testutil_session(); |
523 Session *sn = testutil_session(); |
| 524 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
524 Request *rq = testutil_request(sn->pool, "PUT", "/"); |
| 525 rq->vfs = testvfs_create(sn); |
525 rq->vfs = testvfs_create(sn); |
| 526 |
526 |
| 527 VFSContext *vfs = vfs_request_context(sn, rq); |
527 VFSContext *vfs = vfs_request_context(sn, rq); |
| 528 |
528 |
| 529 UCX_TEST_BEGIN; |
529 CX_TEST_DO { |
| 530 // prepare test |
530 // prepare test |
| 531 int err; |
531 int err; |
| 532 err = vfs_mkdir(vfs, "/dir1"); |
532 err = vfs_mkdir(vfs, "/dir1"); |
| 533 UCX_TEST_ASSERT(err == 0, "mkdir 1: error not 0"); |
533 CX_TEST_ASSERT(err == 0); |
| 534 err = vfs_mkdir(vfs, "/dir2"); |
534 err = vfs_mkdir(vfs, "/dir2"); |
| 535 UCX_TEST_ASSERT(err == 0, "mkdir 1: error not 0"); |
535 CX_TEST_ASSERT(err == 0); |
| 536 |
536 |
| 537 SYS_FILE f1 = vfs_open(vfs, "/dir1/file1", O_CREAT); |
537 SYS_FILE f1 = vfs_open(vfs, "/dir1/file1", O_CREAT); |
| 538 UCX_TEST_ASSERT(f1, "f1 not opened"); |
538 CX_TEST_ASSERT(f1); |
| 539 |
539 |
| 540 err = vfs_rmdir(vfs, "/dir1"); |
540 err = vfs_rmdir(vfs, "/dir1"); |
| 541 UCX_TEST_ASSERT(err != 0, "rmdir /dir1 should fail"); |
541 CX_TEST_ASSERT(err != 0); |
| 542 err = vfs_rmdir(vfs, "/dir2"); |
542 err = vfs_rmdir(vfs, "/dir2"); |
| 543 UCX_TEST_ASSERT(err == 0, "rmdir /dir2 failed"); |
543 CX_TEST_ASSERT(err == 0); |
| 544 |
544 |
| 545 err = vfs_unlink(vfs, "/dir1/file1"); |
545 err = vfs_unlink(vfs, "/dir1/file1"); |
| 546 UCX_TEST_ASSERT(err == 0, "unlink failed"); |
546 CX_TEST_ASSERT(err == 0); |
| 547 err = vfs_rmdir(vfs, "/dir1"); |
547 err = vfs_rmdir(vfs, "/dir1"); |
| 548 UCX_TEST_ASSERT(err == 0, "rmdir /dir1 (2) failed"); |
548 CX_TEST_ASSERT(err == 0); |
| 549 |
549 |
| 550 UCX_TEST_END; |
550 } |
| 551 |
551 |
| 552 testutil_destroy_session(sn); |
552 testutil_destroy_session(sn); |
| 553 } |
553 } |