diff options
| author | Felipe Boeira <felipe.boeira@liu.se> | 2020-03-04 14:49:23 +0100 |
|---|---|---|
| committer | Felipe Boeira <felipe.boeira@liu.se> | 2020-03-04 14:49:23 +0100 |
| commit | aa02564229d69a16da3d34a3742233aac81fd8b1 (patch) | |
| tree | c958a2f70d55ae7c3720d28559b3a5448b3f42b2 /src/examples/pfs.c | |
| parent | a2730d47f02ddd8c40021bfdd962b986b09fc556 (diff) | |
| download | pintos-aa02564229d69a16da3d34a3742233aac81fd8b1.tar.gz | |
Updated tests
Diffstat (limited to 'src/examples/pfs.c')
| -rw-r--r-- | src/examples/pfs.c | 122 |
1 files changed, 105 insertions, 17 deletions
diff --git a/src/examples/pfs.c b/src/examples/pfs.c index 0d9cd52..a42ddfc 100644 --- a/src/examples/pfs.c +++ b/src/examples/pfs.c @@ -1,22 +1,110 @@ #include "syscall.h" +#include "pfs.h" + +#include <random.h> +#include <stdio.h> +#include <string.h> int main(void) { - int i; - int pid[5]; - - create("file.1", 50000); - create("messages", 5000); - - pid[0] = exec("pfs_writer a z"); - pid[1] = exec("pfs_writer A Z"); - pid[2] = exec("pfs_reader"); - pid[3] = exec("pfs_reader"); - pid[4] = exec("pfs_reader"); - - for (i = 0; i < 5; i++) - { - wait(pid[i]); - } - exit(0); + int i; + int pid[N_PROC]; + char seed[R_BYTES]; + int ret; + int len; + char pfswriter[50] = "pfs_writer a z "; + int fail = 0; + + ret = open("random"); + if (!ret) { + printf("Failed to open random.\n"); + exit(-1); + } + + read(ret, &seed[0], R_BYTES); + close(ret); + + random_init((int)seed[0]); + len = strlen(pfswriter); + + ret = create("file.1", BIG * TIMES); + + if (!ret) { + printf("Failed to create file.1\n"); + exit(-1); + } + + for (i = 0; i < N_PROC; i++) { + if(random_ulong() % 2 == 0) { + pfswriter[len] = seed[i]; + pfswriter[len + 1] = 0; + pid[i] = exec(pfswriter); + if (pid[i] < 0) { + printf("ERROR: Child creation returned %d\n", pid[i]); + fail = 1; + } + } + else { + pid[i] = exec("pfs_reader"); + if (pid[i] < 0) { + printf("ERROR: Child creation returned %d\n", pid[i]); + fail = 1; + } + } + } + + for (i = 0; i < N_PROC; i++) + { + ret = wait(pid[i]); + if (ret < 0) { + printf("ERROR: Child wait returned %d\n", ret); + fail = 1; + } + } + + + printf("Testing concurrent writers\n"); + + for (i =0; i < N_PROC; i++) { + pfswriter[len] = seed[i]; + pfswriter[len + 1] = 0; + pid[i] = exec(pfswriter); + if (pid[i] < 0) { + printf("ERROR: Child creation returned %d\n", pid[i]); + fail = 1; + } + } + + for (i = 0; i < N_PROC; i++) + { + ret = wait(pid[i]); + if (ret < 0) { + printf("ERROR: Child wait returned %d\n", ret); + fail = 1; + } + } + + printf("Testing concurrent readers\n"); + + for (i =0; i < N_PROC; i++) { + pid[i] = exec("pfs_reader"); + if (pid[i] < 0) { + printf("ERROR: Child creation returned %d\n", pid[i]); + fail = 1; + } + } + + for (i = 0; i < N_PROC; i++) + { + ret = wait(pid[i]); + if (ret < 0) { + printf("ERROR: Child wait returned %d\n", ret); + fail = 1; + } + } + + if (fail) + printf("Test failed!\n"); + + exit(0); } |
