Changeset 2d11a7d8 in mainline for uspace/app/tester/vfs/vfs1.c


Ignore:
Timestamp:
2009-06-30T15:54:14Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
9c40f88
Parents:
db24058
Message:

tester framework rewrite (go from a menu-driven interface to command-line interface)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/tester/vfs/vfs1.c

    rdb24058 r2d11a7d8  
    3535#include <fcntl.h>
    3636#include <dirent.h>
     37#include <devmap.h>
    3738#include <sys/types.h>
    3839#include <sys/stat.h>
    3940#include "../tester.h"
    4041
    41 char text[] = "O xein', angellein Lakedaimoniois hoti teide "
    42         "keimetha tois keinon rhemasi peithomenoi.";
     42#define FS_TYPE      "tmpfs"
     43#define MOUNT_POINT  "/tmp"
     44#define OPTIONS      ""
     45#define FLAGS        0
    4346
    44 char *test_vfs1(bool quiet)
     47#define TEST_DIRECTORY  MOUNT_POINT "/testdir"
     48#define TEST_FILE       TEST_DIRECTORY "/testfile"
     49#define TEST_FILE2      TEST_DIRECTORY "/nextfile"
     50
     51#define MAX_DEVICE_NAME  32
     52#define BUF_SIZE         16
     53
     54static char text[] = "Lorem ipsum dolor sit amet, consectetur adipisicing elit";
     55
     56static char *read_root(void)
    4557{
    46         int rc;
    47 
    48         rc = mount("tmpfs", "/", "nulldev0", "", 0);
    49         switch (rc) {
    50         case EOK:
    51                 if (!quiet)
    52                         printf("mounted tmpfs on /\n");
    53                 break;
    54         case EBUSY:
    55                 if (!quiet)
    56                         printf("(INFO) something is already mounted on /\n");
    57                 break;
    58         default:
    59                 if (!quiet)
    60                         printf("(INFO) IPC returned errno %d\n", rc);
    61                 return "mount() failed.";
    62         }
    63 
    64         if (mkdir("/mydir", 0) != 0)
    65                 return "mkdir() failed.\n";
    66         if (!quiet)
    67                 printf("created directory /mydir\n");
     58        TPRINTF("Opening the root directory...");
    6859       
    69         int fd0 = open("/mydir/myfile", O_CREAT);
    70         if (fd0 < 0)
    71                 return "open() failed.\n";
    72         if (!quiet)
    73                 printf("created file /mydir/myfile, fd=%d\n", fd0);
    74 
    75         ssize_t cnt;
    76         size_t size = sizeof(text);
    77         cnt = write(fd0, text, size);
    78         if (cnt < 0)
    79                 return "write() failed.\n";
    80         if (!quiet)
    81                 printf("written %d bytes, fd=%d\n", cnt, fd0);
    82         if (lseek(fd0, 0, SEEK_SET) != 0)
    83                 return "lseek() failed.\n";
    84         if (!quiet)
    85                 printf("sought to position 0, fd=%d\n", fd0);
    86 
    87         char buf[10];
    88 
    89         while ((cnt = read(fd0, buf, sizeof(buf)))) {
    90                 if (cnt < 0)
    91                         return "read() failed.\n";
    92                 if (!quiet)
    93                         printf("read %d bytes: \"%.*s\", fd=%d\n", cnt, cnt,
    94                             buf, fd0);
    95         }
    96 
    97         close(fd0);
    98 
    99         DIR *dirp;
     60        DIR *dirp = opendir("/");
     61        if (!dirp) {
     62                TPRINTF("\n");
     63                return "opendir() failed";
     64        } else
     65                TPRINTF("OK\n");
     66       
    10067        struct dirent *dp;
    101 
    102         if (!quiet)
    103                 printf("scanning the root directory...\n");
    104 
    105         dirp = opendir("/");
    106         if (!dirp)
    107                 return "opendir() failed\n";
    10868        while ((dp = readdir(dirp)))
    109                 printf("discovered node %s in /\n", dp->d_name);
     69                TPRINTF(" node \"%s\"\n", dp->d_name);
    11070        closedir(dirp);
    111 
    112         if (rename("/mydir/myfile", "/mydir/yourfile"))
    113                 return "rename() failed.\n";
    114 
    115         if (!quiet)
    116                 printf("renamed /mydir/myfile to /mydir/yourfile\n");
    117 
    118         if (unlink("/mydir/yourfile"))
    119                 return "unlink() failed.\n";
    12071       
    121         if (!quiet)
    122                 printf("unlinked file /mydir/yourfile\n");
    123 
    124         if (rmdir("/mydir"))
    125                 return "rmdir() failed.\n";
    126 
    127         if (!quiet)
    128                 printf("removed directory /mydir\n");
    129        
    130         if (!quiet)
    131                 printf("scanning the root directory...\n");
    132 
    133         dirp = opendir("/");
    134         if (!dirp)
    135                 return "opendir() failed\n";
    136         while ((dp = readdir(dirp)))
    137                 printf("discovered node %s in /\n", dp->d_name);
    138         closedir(dirp);
    139 
    14072        return NULL;
    14173}
    14274
     75char *test_vfs1(void)
     76{
     77        if (mkdir(MOUNT_POINT, 0) != 0)
     78                return "mkdir() failed";
     79        TPRINTF("Created directory %s\n", MOUNT_POINT);
     80       
     81        char null[MAX_DEVICE_NAME];
     82        int null_id = devmap_null_create();
     83       
     84        if (null_id == -1)
     85                return "Unable to create null device";
     86       
     87        snprintf(null, MAX_DEVICE_NAME, "null%d", null_id);
     88        int rc = mount(FS_TYPE, MOUNT_POINT, null, OPTIONS, FLAGS);
     89        switch (rc) {
     90        case EOK:
     91                TPRINTF("Mounted /dev/%s as %s on %s\n", null, FS_TYPE, MOUNT_POINT);
     92                break;
     93        case EBUSY:
     94                TPRINTF("(INFO) Filesystem already mounted on %s\n", MOUNT_POINT);
     95                break;
     96        default:
     97                TPRINTF("(ERR) IPC returned errno %d (is tmpfs loaded?)\n", rc);
     98                return "mount() failed";
     99        }
     100       
     101        if (mkdir(TEST_DIRECTORY, 0) != 0)
     102                return "mkdir() failed";
     103        TPRINTF("Created directory %s\n", TEST_DIRECTORY);
     104       
     105        int fd0 = open(TEST_FILE, O_CREAT);
     106        if (fd0 < 0)
     107                return "open() failed";
     108        TPRINTF("Created file %s (fd=%d)\n", TEST_FILE, fd0);
     109       
     110        size_t size = sizeof(text);
     111        ssize_t cnt = write(fd0, text, size);
     112        if (cnt < 0)
     113                return "write() failed";
     114        TPRINTF("Written %d bytes\n", cnt);
     115       
     116        if (lseek(fd0, 0, SEEK_SET) != 0)
     117                return "lseek() failed";
     118        TPRINTF("Sought to position 0\n");
     119       
     120        char buf[BUF_SIZE];
     121        while ((cnt = read(fd0, buf, BUF_SIZE))) {
     122                if (cnt < 0)
     123                        return "read() failed";
     124               
     125                TPRINTF("Read %d bytes: \".*s\"\n", cnt, cnt, buf);
     126        }
     127       
     128        close(fd0);
     129       
     130        char *rv = read_root();
     131        if (rv != NULL)
     132                return rv;
     133       
     134        if (rename(TEST_FILE, TEST_FILE2))
     135                return "rename() failed";
     136        TPRINTF("Renamed %s to %s\n", TEST_FILE, TEST_FILE2);
     137       
     138        if (unlink(TEST_FILE2))
     139                return "unlink() failed";
     140        TPRINTF("Unlinked %s\n", TEST_FILE2);
     141       
     142        if (rmdir(TEST_DIRECTORY))
     143                return "rmdir() failed";
     144        TPRINTF("Removed directory %s\n", TEST_DIRECTORY);
     145       
     146        rv = read_root();
     147        if (rv != NULL)
     148                return rv;
     149       
     150        return NULL;
     151}
Note: See TracChangeset for help on using the changeset viewer.