Esempio n. 1
0
static void
test_Write_File_and_Read_File(TestBatch *batch)
{
    RAMFolder *folder  = RAMFolder_new(NULL);
    Segment   *segment = Seg_new(100);
    Segment   *got     = Seg_new(100);
    CharBuf   *meta;
    CharBuf   *flotsam = (CharBuf*)ZCB_WRAP_STR("flotsam", 7);
    CharBuf   *jetsam  = (CharBuf*)ZCB_WRAP_STR("jetsam", 6);

    Seg_Set_Count(segment, 111);
    Seg_Store_Metadata_Str(segment, "foo", 3, (Obj*)CB_newf("bar"));
    Seg_Add_Field(segment, flotsam);
    Seg_Add_Field(segment, jetsam);
    
    RAMFolder_MkDir(folder, Seg_Get_Name(segment));
    Seg_Write_File(segment, (Folder*)folder);
    Seg_Read_File(got, (Folder*)folder);

    TEST_TRUE(batch, Seg_Get_Count(got) == Seg_Get_Count(segment), 
        "Round-trip count through file");
    TEST_TRUE(batch, 
        Seg_Field_Num(got, jetsam) == Seg_Field_Num(segment, jetsam), 
        "Round trip field names through file");
    meta = (CharBuf*)Seg_Fetch_Metadata_Str(got, "foo", 3);
    TEST_TRUE(batch, meta && CB_Is_A(meta, CHARBUF) 
        && CB_Equals_Str(meta, "bar", 3), "Round trip metadata through file");

    DECREF(got);
    DECREF(segment);
    DECREF(folder);
}
Esempio n. 2
0
static void
test_Write_File_and_Read_File(TestBatchRunner *runner) {
    RAMFolder *folder  = RAMFolder_new(NULL);
    Segment   *segment = Seg_new(100);
    Segment   *got     = Seg_new(100);
    String    *meta;
    String    *flotsam = (String*)SSTR_WRAP_UTF8("flotsam", 7);
    String    *jetsam  = (String*)SSTR_WRAP_UTF8("jetsam", 6);

    Seg_Set_Count(segment, 111);
    Seg_Store_Metadata_Utf8(segment, "foo", 3, (Obj*)Str_newf("bar"));
    Seg_Add_Field(segment, flotsam);
    Seg_Add_Field(segment, jetsam);

    RAMFolder_MkDir(folder, Seg_Get_Name(segment));
    Seg_Write_File(segment, (Folder*)folder);
    Seg_Read_File(got, (Folder*)folder);

    TEST_TRUE(runner, Seg_Get_Count(got) == Seg_Get_Count(segment),
              "Round-trip count through file");
    TEST_TRUE(runner,
              Seg_Field_Num(got, jetsam) == Seg_Field_Num(segment, jetsam),
              "Round trip field names through file");
    meta = (String*)Seg_Fetch_Metadata_Utf8(got, "foo", 3);
    TEST_TRUE(runner,
              meta
              && Str_Is_A(meta, STRING)
              && Str_Equals_Utf8(meta, "bar", 3),
              "Round trip metadata through file");

    DECREF(got);
    DECREF(segment);
    DECREF(folder);
}
Esempio n. 3
0
static void
test_Local_Find_Folder(TestBatchRunner *runner) {
    RAMFolder *folder = RAMFolder_new(NULL);
    RAMFolder *local;
    FileHandle *fh;

    RAMFolder_MkDir(folder, foo);
    RAMFolder_MkDir(folder, foo_bar);
    fh = RAMFolder_Open_FileHandle(folder, boffo,
                                   FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);
    fh = RAMFolder_Open_FileHandle(folder, foo_boffo,
                                   FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);

    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, nope);
    TEST_TRUE(runner, local == NULL, "Non-existent entry yields NULL");

    ZombieCharBuf *empty = ZCB_BLANK();
    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, (CharBuf*)empty);
    TEST_TRUE(runner, local == NULL, "Empty string yields NULL");

    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, foo_bar);
    TEST_TRUE(runner, local == NULL, "nested folder yields NULL");

    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, foo_boffo);
    TEST_TRUE(runner, local == NULL, "nested file yields NULL");

    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, boffo);
    TEST_TRUE(runner, local == NULL, "local file yields NULL");

    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, bar);
    TEST_TRUE(runner, local == NULL, "name of nested folder yields NULL");

    local = (RAMFolder*)RAMFolder_Local_Find_Folder(folder, foo);
    TEST_TRUE(runner,
              local
              && RAMFolder_Is_A(local, RAMFOLDER)
              && CB_Equals_Str(RAMFolder_Get_Path(local), "foo", 3),
              "Find local directory");

    DECREF(folder);
}
Esempio n. 4
0
static void
test_all(TestBatchRunner *runner) {
    RAMFolder *folder        = RAMFolder_new(NULL);
    String    *foo           = SSTR_WRAP_C("foo");
    String    *boffo         = SSTR_WRAP_C("boffo");
    String    *foo_boffo     = SSTR_WRAP_C("foo/boffo");
    bool       saw_foo       = false;
    bool       saw_boffo     = false;
    bool       foo_was_dir   = false;
    bool       boffo_was_dir = false;
    int        count         = 0;

    // Set up folder contents.
    RAMFolder_MkDir(folder, foo);
    FileHandle *fh = RAMFolder_Open_FileHandle(folder, boffo,
                                               FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);
    fh = RAMFolder_Open_FileHandle(folder, foo_boffo,
                                   FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);

    RAMDirHandle *dh = RAMDH_new(folder);
    while (RAMDH_Next(dh)) {
        count++;
        String *entry = RAMDH_Get_Entry(dh);
        if (Str_Equals(entry, (Obj*)foo)) {
            saw_foo = true;
            foo_was_dir = RAMDH_Entry_Is_Dir(dh);
        }
        else if (Str_Equals(entry, (Obj*)boffo)) {
            saw_boffo = true;
            boffo_was_dir = RAMDH_Entry_Is_Dir(dh);
        }
        DECREF(entry);
    }
    TEST_INT_EQ(runner, 2, count, "correct number of entries");
    TEST_TRUE(runner, saw_foo, "Directory was iterated over");
    TEST_TRUE(runner, foo_was_dir,
              "Dir correctly identified by Entry_Is_Dir");
    TEST_TRUE(runner, saw_boffo, "File was iterated over");
    TEST_FALSE(runner, boffo_was_dir,
               "File correctly identified by Entry_Is_Dir");

    uint32_t refcount = REFCOUNT_NN(folder);
    RAMDH_Close(dh);
    TEST_INT_EQ(runner, REFCOUNT_NN(folder), refcount - 1,
                "Folder reference released by Close()");

    DECREF(dh);
    DECREF(folder);
}
Esempio n. 5
0
static void
test_Hard_Link(TestBatchRunner *runner) {
    RAMFolder *folder = RAMFolder_new(NULL);
    FileHandle *fh;
    bool result;

    RAMFolder_MkDir(folder, foo);
    RAMFolder_MkDir(folder, foo_bar);
    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);

    // Link files.

    result = RAMFolder_Hard_Link(folder, boffo, banana);
    TEST_TRUE(runner, result, "Hard_Link succeeds and returns true");
    TEST_TRUE(runner, RAMFolder_Exists(folder, banana),
              "File exists at new path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
              "File still exists at old path");
    RAMFolder_Delete(folder, boffo);

    result = RAMFolder_Hard_Link(folder, banana, foo_bar_boffo);
    TEST_TRUE(runner, result, "Hard_Link to target within nested dir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
              "File exists at new path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, banana),
              "File still exists at old path");
    RAMFolder_Delete(folder, banana);

    result = RAMFolder_Hard_Link(folder, foo_bar_boffo, foo_boffo);
    TEST_TRUE(runner, result, "Hard_Link from file in nested dir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File exists at new path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
              "File still exists at old path");
    RAMFolder_Delete(folder, foo_bar_boffo);

    // Invalid clobbers.

    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);
    result = RAMFolder_Hard_Link(folder, foo_boffo, boffo);
    TEST_FALSE(runner, result, "Clobber of file fails");
    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
              "File still exists at new path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File still exists at old path");
    RAMFolder_Delete(folder, boffo);

    RAMFolder_MkDir(folder, baz);
    result = RAMFolder_Hard_Link(folder, foo_boffo, baz);
    TEST_FALSE(runner, result, "Clobber of dir fails");
    TEST_TRUE(runner, RAMFolder_Exists(folder, baz),
              "Dir still exists at new path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File still exists at old path");
    RAMFolder_Delete(folder, baz);

    // Invalid Hard_Link of dir.

    RAMFolder_MkDir(folder, baz);
    result = RAMFolder_Hard_Link(folder, baz, banana);
    TEST_FALSE(runner, result, "Hard_Link dir fails");
    TEST_FALSE(runner, RAMFolder_Exists(folder, banana),
               "Nothing at new path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, baz),
              "Folder still exists at old path");
    RAMFolder_Delete(folder, baz);

    // Test that linking to yourself fails.

    result = RAMFolder_Hard_Link(folder, foo_boffo, foo_boffo);
    TEST_FALSE(runner, result, "Hard_Link file to itself fails");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File still exists");

    // Invalid filepaths.

    Err_set_error(NULL);
    result = RAMFolder_Rename(folder, foo_boffo, nope_nyet);
    TEST_FALSE(runner, result, "Hard_Link into non-existent subdir fails");
    TEST_TRUE(runner, Err_get_error() != NULL,
              "Hard_Link into non-existent subdir sets Err_error");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "Entry still exists at old path");

    Err_set_error(NULL);
    result = RAMFolder_Rename(folder, nope_nyet, boffo);
    TEST_FALSE(runner, result, "Hard_Link non-existent source file fails");
    TEST_TRUE(runner, Err_get_error() != NULL,
              "Hard_Link non-existent source file sets Err_error");

    DECREF(folder);
}
Esempio n. 6
0
static void
test_Rename(TestBatchRunner *runner) {
    RAMFolder *folder = RAMFolder_new(NULL);
    FileHandle *fh;
    bool result;

    RAMFolder_MkDir(folder, foo);
    RAMFolder_MkDir(folder, foo_bar);
    fh = RAMFolder_Open_FileHandle(folder, boffo, FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);

    // Move files.

    result = RAMFolder_Rename(folder, boffo, banana);
    TEST_TRUE(runner, result, "Rename succeeds and returns true");
    TEST_TRUE(runner, RAMFolder_Exists(folder, banana),
              "File exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, boffo),
               "File no longer exists at old path");

    result = RAMFolder_Rename(folder, banana, foo_bar_boffo);
    TEST_TRUE(runner, result, "Rename to file in nested dir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
              "File exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, banana),
               "File no longer exists at old path");

    result = RAMFolder_Rename(folder, foo_bar_boffo, boffo);
    TEST_TRUE(runner, result, "Rename from file in nested dir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
              "File exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, foo_bar_boffo),
               "File no longer exists at old path");

    fh = RAMFolder_Open_FileHandle(folder, foo_boffo,
                                   FH_CREATE | FH_WRITE_ONLY);
    DECREF(fh);
    result = RAMFolder_Rename(folder, boffo, foo_boffo);
    TEST_TRUE(runner, result, "Clobber");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, boffo),
               "File no longer exists at old path");

    // Move Dirs.

    RAMFolder_MkDir(folder, baz);
    result = RAMFolder_Rename(folder, baz, boffo);
    TEST_TRUE(runner, result, "Rename dir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, boffo),
              "Folder exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, baz),
               "Folder no longer exists at old path");

    result = RAMFolder_Rename(folder, boffo, foo_foo);
    TEST_TRUE(runner, result, "Rename dir into nested subdir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_foo),
              "Folder exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, boffo),
               "Folder no longer exists at old path");

    result = RAMFolder_Rename(folder, foo_foo, foo_bar_baz);
    TEST_TRUE(runner, result, "Rename dir from nested subdir");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar_baz),
              "Folder exists at new path");
    TEST_FALSE(runner, RAMFolder_Exists(folder, foo_foo),
               "Folder no longer exists at old path");

    // Test failed clobbers.

    Err_set_error(NULL);
    result = RAMFolder_Rename(folder, foo_boffo, foo_bar);
    TEST_FALSE(runner, result, "Rename file clobbering dir fails");
    TEST_TRUE(runner, Err_get_error() != NULL,
              "Failed rename sets Err_error");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File still exists at old path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar),
              "Dir still exists after failed clobber");

    Err_set_error(NULL);
    result = RAMFolder_Rename(folder, foo_bar, foo_boffo);
    TEST_FALSE(runner, result, "Rename dir clobbering file fails");
    TEST_TRUE(runner, Err_get_error() != NULL,
              "Failed rename sets Err_error");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar),
              "Dir still exists at old path");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File still exists after failed clobber");

    // Test that "renaming" succeeds where to and from are the same.

    result = RAMFolder_Rename(folder, foo_boffo, foo_boffo);
    TEST_TRUE(runner, result, "Renaming file to itself succeeds");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "File still exists");

    result = RAMFolder_Rename(folder, foo_bar, foo_bar);
    TEST_TRUE(runner, result, "Renaming dir to itself succeeds");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_bar),
              "Dir still exists");

    // Invalid filepaths.

    Err_set_error(NULL);
    result = RAMFolder_Rename(folder, foo_boffo, nope_nyet);
    TEST_FALSE(runner, result, "Rename into non-existent subdir fails");
    TEST_TRUE(runner, Err_get_error() != NULL,
              "Renaming into non-existent subdir sets Err_error");
    TEST_TRUE(runner, RAMFolder_Exists(folder, foo_boffo),
              "Entry still exists at old path");

    Err_set_error(NULL);
    result = RAMFolder_Rename(folder, nope_nyet, boffo);
    TEST_FALSE(runner, result, "Rename non-existent file fails");
    TEST_TRUE(runner, Err_get_error() != NULL,
              "Renaming non-existent source file sets Err_error");

    DECREF(folder);
}