Skip to content
Snippets Groups Projects
userfs.c 3.66 KiB
Newer Older
kaashoek's avatar
kaashoek committed
#include "types.h"
kaashoek's avatar
kaashoek committed
#include "stat.h"
#include "user.h"
kaashoek's avatar
kaashoek committed
#include "fs.h"
#include "fcntl.h"
rsc's avatar
 
rsc committed

kaashoek's avatar
kaashoek committed
// simple file system tests
kaashoek's avatar
kaashoek committed

kaashoek's avatar
kaashoek committed
char name[3];
char *echo_args[] = { "echo", "hello", "goodbye", 0 };
char *cat_args[] = { "cat", "readme", 0 };
kaashoek's avatar
kaashoek committed
int stdout = 1;
kaashoek's avatar
kaashoek committed

kaashoek's avatar
kaashoek committed
void
opentest(void)
kaashoek's avatar
kaashoek committed
{
rtm's avatar
rtm committed
  int fd;
kaashoek's avatar
kaashoek committed

rtm's avatar
rtm committed
  fd = open("echo", 0);
  if(fd >= 0){
kaashoek's avatar
kaashoek committed
    printf(stdout, "open echo ok\n");
rtm's avatar
rtm committed
    close(fd);
  } else {
kaashoek's avatar
kaashoek committed
    printf(stdout, "open echo failed!\n");
kaashoek's avatar
kaashoek committed
    exit();
rtm's avatar
rtm committed
  }
  fd = open("doesnotexist", 0);
  if(fd >= 0){
kaashoek's avatar
kaashoek committed
    printf(stdout, "open doesnotexist succeeded!\n");
kaashoek's avatar
kaashoek committed
    exit();
rtm's avatar
rtm committed
  } else {
kaashoek's avatar
kaashoek committed
    printf(stdout, "open doesnotexist failed\n");
rtm's avatar
rtm committed
  }
rsc's avatar
rsc committed
void
kaashoek's avatar
kaashoek committed
writetest(void)
{
  int fd;
  int i;

  fd = open("small", O_CREATE|O_RDWR);
kaashoek's avatar
kaashoek committed
  if(fd >= 0){
kaashoek's avatar
kaashoek committed
    printf(stdout, "creat small succeeded\n");
kaashoek's avatar
kaashoek committed
  } else {
kaashoek's avatar
kaashoek committed
    printf(stdout, "error: creat small failed!\n");
    exit();
kaashoek's avatar
kaashoek committed
  }
rsc's avatar
rsc committed
  for(i = 0; i < 100; i++) {
    if(write(fd, "aaaaaaaaaa", 10) != 10) {
kaashoek's avatar
kaashoek committed
      printf(stdout, "error: write aa %d new file failed\n", i);
kaashoek's avatar
kaashoek committed
      exit();
kaashoek's avatar
kaashoek committed
    }
rsc's avatar
rsc committed
    if(write(fd, "bbbbbbbbbb", 10) != 10) {
kaashoek's avatar
kaashoek committed
      printf(stdout, "error: write bb %d new file failed\n", i);
kaashoek's avatar
kaashoek committed
      exit();
kaashoek's avatar
kaashoek committed
    }
  }
  printf(stdout, "writes done\n");
  close(fd);
kaashoek's avatar
kaashoek committed
  fd = open("small", O_RDONLY);
kaashoek's avatar
kaashoek committed
  if(fd >= 0){
kaashoek's avatar
kaashoek committed
    printf(stdout, "open small succeeded\n");
kaashoek's avatar
kaashoek committed
  } else {
kaashoek's avatar
kaashoek committed
    printf(stdout, "error: open small failed!\n");
    exit();
kaashoek's avatar
kaashoek committed
  }
kaashoek's avatar
kaashoek committed
  i = read(fd, buf, 2000);
rsc's avatar
rsc committed
  if(i == 2000) {
kaashoek's avatar
kaashoek committed
    printf(stdout, "read succeeded\n");
kaashoek's avatar
kaashoek committed
  } else {
kaashoek's avatar
kaashoek committed
    printf(stdout, "read failed\n");
kaashoek's avatar
kaashoek committed
    exit();
kaashoek's avatar
kaashoek committed
  }
  close(fd);
kaashoek's avatar
kaashoek committed

rsc's avatar
rsc committed
  if(unlink("small") < 0) {
kaashoek's avatar
kaashoek committed
    printf(stdout, "unlink small failed\n");
    exit();
  }
}

rsc's avatar
rsc committed
void
kaashoek's avatar
kaashoek committed
writetest1(void)
{
  int i, fd, n;

  printf(stdout, "big files\n");

  fd = open("big", O_CREATE|O_RDWR);
  if(fd < 0){
    printf(stdout, "error: creat big failed!\n");
    exit();
  }

rsc's avatar
rsc committed
  for(i = 0; i < MAXFILE; i++) {
    ((int*) buf)[0] = i;
    if(write(fd, buf, 512) != 512) {
kaashoek's avatar
kaashoek committed
      printf(stdout, "error: write big file failed\n", i);
      exit();
    }
  }

  close(fd);

  fd = open("big", O_RDONLY);
  if(fd < 0){
    printf(stdout, "error: open big failed!\n");
    exit();
  }

  n = 0;
rsc's avatar
rsc committed
  while(1) {
kaashoek's avatar
kaashoek committed
    i = read(fd, buf, 512);
rsc's avatar
rsc committed
    if(i == 0) {
      if(n == MAXFILE - 1) {
        printf(stdout, "read only %d blocks from big", n);
        exit();
kaashoek's avatar
kaashoek committed
      }
      break;
rsc's avatar
rsc committed
    } else if(i != 512) {
kaashoek's avatar
kaashoek committed
      printf(stdout, "read failed %d\n", i);
      exit();
    }
rsc's avatar
rsc committed
    if(((int*)buf)[0] != n) {
      printf(stdout, "read content of block %d is %d\n", n, ((int*)buf)[0]);
kaashoek's avatar
kaashoek committed
      exit();
    }
    n++;
  }
  close(fd);
rsc's avatar
rsc committed
  if(unlink("big") < 0) {
kaashoek's avatar
kaashoek committed
    printf(stdout, "unlink big failed\n");
    exit();
  }
}
kaashoek's avatar
kaashoek committed

kaashoek's avatar
kaashoek committed
void
createtest(void)
{
  int i, fd;
kaashoek's avatar
kaashoek committed

  printf(stdout, "many creates, followed by unlink\n");

kaashoek's avatar
kaashoek committed
  name[0] = 'a';
  name[2] = '\0';
rsc's avatar
rsc committed
  for(i = 0; i < 52; i++) {
kaashoek's avatar
kaashoek committed
    name[1] = '0' + i;
    fd = open(name, O_CREATE|O_RDWR);
    close(fd);
  }
  name[0] = 'a';
  name[2] = '\0';
rsc's avatar
rsc committed
  for(i = 0; i < 52; i++) {
kaashoek's avatar
kaashoek committed
    name[1] = '0' + i;
    unlink(name);
  }
kaashoek's avatar
kaashoek committed

kaashoek's avatar
kaashoek committed
void dirtest(void)
{
kaashoek's avatar
kaashoek committed
  printf(stdout, "mkdir\n");

rsc's avatar
rsc committed
  if(mkdir("dir0") < 0)  {
kaashoek's avatar
kaashoek committed
    printf(stdout, "mkdir failed\n");
rsc's avatar
rsc committed
  if(chdir("dir0") < 0)  {
kaashoek's avatar
kaashoek committed
    printf(stdout, "chdir dir0 failed\n");
    exit();
  }
kaashoek's avatar
kaashoek committed

rsc's avatar
rsc committed
  if(chdir("..") < 0)  {
kaashoek's avatar
kaashoek committed
    printf(stdout, "chdir .. failed\n");
rsc's avatar
rsc committed
    exit();
rsc's avatar
rsc committed

  if(unlink("dir0") < 0) {
kaashoek's avatar
kaashoek committed
    printf(stdout, "unlink dir0 failed\n");
    exit();
  }
}

void
exectest(void)
{
rsc's avatar
rsc committed
  if(exec("echo", echo_args) < 0) {
kaashoek's avatar
kaashoek committed
    printf(stdout, "exec echo failed\n");
    exit();
  }
rsc's avatar
rsc committed
  if(exec("cat", cat_args) < 0) {
kaashoek's avatar
kaashoek committed
    printf(stdout, "exec cat failed\n");
    exit();
  }
}

int
main(void)
{
  printf(stdout, "userfs is running\n");
  opentest();
  writetest();
  writetest1();
  createtest();
  exectest();
rsc's avatar
 
rsc committed
  return 0;
kaashoek's avatar
kaashoek committed
}