Skip to content
Snippets Groups Projects
userfs.c 3.69 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
  }
kaashoek's avatar
kaashoek committed
}

void 
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
  }
  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
    }
    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);
kaashoek's avatar
kaashoek 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

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

void 
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();
  }

  for (i = 0; i < MAXFILE; i++) {
    ((int *) buf)[0] = i;
    if (write (fd, buf, 512) != 512) {
      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;
  while (1) {
    i = read(fd, buf, 512);
    if (i == 0) {
      if (n == MAXFILE - 1) {
        printf(stdout, "read only %d blocks from big", n);
        exit();
kaashoek's avatar
kaashoek committed
      }
      break;
    } else if (i != 512) {
      printf(stdout, "read failed %d\n", i);
      exit();
    }
    if (((int *)buf)[0] != n) {
      printf(stdout, "read content of block %d is %d\n", n, ((int *)buf)[0]);
      exit();
    }
    n++;
  }
  close(fd);
  if (unlink("big") < 0) {
    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';
  for (i = 0; i < 52; i++) {
    name[1] = '0' + i;
    fd = open(name, O_CREATE|O_RDWR);
    close(fd);
  }
  name[0] = 'a';
  name[2] = '\0';
  for (i = 0; i < 52; i++) {
    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");

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

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

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

void
exectest(void)
{
  if (exec("echo", echo_args) < 0) {
    printf(stdout, "exec echo failed\n");
    exit();
  }
  if (exec("cat", cat_args) < 0) {
    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
}