Esempio n. 1
0
int main(void)
{
        struct ramdisk_struct *simulated_disk;

        simulated_disk = create_ramdisk(RAMDISK_SIZE, DEFAULT_LBA_SHIFT);
        if (!simulated_disk) {
                fprintf(stderr, "error initializing ramdisk");
                return -1;
        }

        start_simulation(simulated_disk);

        destroy_ramdisk(simulated_disk);

        return 0;
}
int mount_main(int argc, char *argv[])
{
    int  ret;

#ifndef CONFIG_EXAMPLES_MOUNT_DEVNAME
    /* Create a RAM disk for the test */

    ret = create_ramdisk();
    if (ret < 0)
    {
        printf("mount_main: ERROR failed to create RAM disk\n");
        return 1;
    }
#endif

    /* Mount the test file system (see arch/sim/src/up_deviceimage.c */

    printf("mount_main: mounting %s filesystem at target=%s with source=%s\n",
           g_filesystemtype, g_target, g_source);

    ret = mount(g_source, g_target, g_filesystemtype, 0, NULL);
    printf("mount_main: mount() returned %d\n", ret);

    if (ret == 0)
    {
        show_statfs(g_mntdir);
        show_statfs(g_target);

#ifdef CONFIG_EXAMPLES_MOUNT_DEVNAME
        /* Read a test file that is already on the test file system image */

        show_directories("", 0);
        succeed_stat(g_testfile1);
        show_statfs(g_testfile1);
        read_test_file(g_testfile1);
#else
        /* Create the test directory that would have been on the canned filesystem */

        succeed_mkdir(g_testdir1);
        show_directories("", 0);
        succeed_stat(g_testdir1);
        show_statfs(g_testdir1);
#endif

        /* Write a test file into a pre-existing directory on the test file system */

        fail_stat(g_testfile2, ENOENT);
        write_test_file(g_testfile2);
        show_directories("", 0);
        succeed_stat(g_testfile2);
        show_statfs(g_testfile2);

        /* Read the file that we just wrote */

        read_test_file(g_testfile2);

        /* Try rmdir() against a file on the directory.  It should fail with ENOTDIR */
#ifdef CONFIG_EXAMPLES_MOUNT_DEVNAME
        fail_rmdir(g_testfile1, ENOTDIR);
#endif

        /* Try rmdir() against the test directory.  It should fail with ENOTEMPTY */

        fail_rmdir(g_testdir1, ENOTEMPTY);

        /* Try unlink() against the test directory.  It should fail with EISDIR */

        fail_unlink(g_testdir1, EISDIR);

        /* Try unlink() against the test file1.  It should succeed. */
#ifdef CONFIG_EXAMPLES_MOUNT_DEVNAME
        succeed_unlink(g_testfile1);
        fail_stat(g_testfile1, ENOENT);
        show_directories("", 0);
#endif

        /* Attempt to open testfile1 should fail with ENOENT */
#ifdef CONFIG_EXAMPLES_MOUNT_DEVNAME
        fail_read_open(g_testfile1, ENOENT);
#endif
        /* Try rmdir() against the test directory.  It should still fail with ENOTEMPTY */

        fail_rmdir(g_testdir1, ENOTEMPTY);

        /* Try mkdir() against the test file2.  It should fail with EEXIST. */

        fail_mkdir(g_testfile2, EEXIST);

        /* Try unlink() against the test file2.  It should succeed. */

        succeed_unlink(g_testfile2);
        show_directories("", 0);
        fail_stat(g_testfile2, ENOENT);

        /* Try mkdir() against the test dir1.  It should fail with EEXIST. */

        fail_mkdir(g_testdir1, EEXIST);

        /* Try rmdir() against the test directory.  mkdir should now succeed. */

        succeed_rmdir(g_testdir1);
        show_directories("", 0);
        fail_stat(g_testdir1, ENOENT);

        /* Try mkdir() against the test dir2.  It should succeed */

        succeed_mkdir(g_testdir2);
        show_directories("", 0);
        succeed_stat(g_testdir2);
        show_statfs(g_testdir2);

        /* Try mkdir() against the test dir2.  It should fail with EXIST */

        fail_mkdir(g_testdir2, EEXIST);

        /* Write a test file into a new directory on the test file system */

        fail_stat(g_testfile3, ENOENT);
        write_test_file(g_testfile3);
        show_directories("", 0);
        succeed_stat(g_testfile3);
        show_statfs(g_testfile3);

        /* Read the file that we just wrote */

        read_test_file(g_testfile3);

        /* Use mkdir() to create test dir3.  It should succeed */

        fail_stat(g_testdir3, ENOENT);
        succeed_mkdir(g_testdir3);
        show_directories("", 0);
        succeed_stat(g_testdir3);
        show_statfs(g_testdir3);

        /* Try rename() on the root directory. Should fail with EXDEV*/

        fail_rename(g_target, g_testdir4, EXDEV);

        /* Try rename() to an existing directory.  Should fail with EEXIST */

        fail_rename(g_testdir2, g_testdir3, EEXIST);

        /* Try rename() to a non-existing directory.  Should succeed */

        fail_stat(g_testdir4, ENOENT);
        succeed_rename(g_testdir3, g_testdir4);
        show_directories("", 0);
        fail_stat(g_testdir3, ENOENT);
        succeed_stat(g_testdir4);
        show_statfs(g_testdir4);

        /* Try rename() of file.  Should work. */

        fail_stat(g_testfile4, ENOENT);
        succeed_rename(g_testfile3, g_testfile4);
        show_directories("", 0);
        fail_stat(g_testfile3, ENOENT);
        succeed_stat(g_testfile4);
        show_statfs(g_testfile4);

        /* Make sure that we can still read the renamed file */

        read_test_file(g_testfile4);

        /* Unmount the file system */

        printf("mount_main: Try unmount(%s)\n", g_target);

        ret = umount(g_target);
        if (ret != 0)
        {
            printf("mount_main: ERROR umount() failed, errno %d\n", errno);
            g_nerrors++;
        }

        printf("mount_main: %d errors reported\n", g_nerrors);
    }

    fflush(stdout);
    return 0;
}