ref: 3f842a00016a70d021ddf27a901d564a8e97ab61
dir: /main.c/
#include <u.h> #include <libc.h> #include <bio.h> #include "dat.h" #include "fns.h" Gefs *fs; static int Bconv(Fmt *fmt) { Blk *b; b = va_arg(fmt->args, Blk*); if(b == nil) return fmtprint(fmt, "Blk(nil)"); return fmtprint(fmt, "Blk(%c)", (b->type == Pivot) ? 'P' : 'L'); } static int Mconv(Fmt *fmt) { char *opname[] = { [Ocreate] "Ocreate", [Odelete] "Odelete", [Owrite] "Owrite", [Owstat] "Owstat", }; Msg *m; m = va_arg(fmt->args, Msg*); return fmtprint(fmt, "Msg(%s, %.*s,%.*s)", opname[m->op], m->nk, m->k, m->nv, m->v); } static int Pconv(Fmt *fmt) { Kvp *kv; kv = va_arg(fmt->args, Kvp*); if(kv->type == Vinl) return fmtprint(fmt, "Kvp(%.*s,%.*s)", kv->nk, kv->k, kv->nv, kv->v); else return fmtprint(fmt, "Kvp(%.*s,(%llx,%llx))", kv->nk, kv->k, kv->bp, kv->bh); } static int Kconv(Fmt *fmt) { Key *k; k = va_arg(fmt->args, Key*); return fmtprint(fmt, "Key(%.*s)", k->nk, k->k); } static void init(void) { initshow(); quotefmtinstall(); fmtinstall('B', Bconv); fmtinstall('M', Mconv); fmtinstall('P', Pconv); fmtinstall('K', Kconv); fs = emalloc(sizeof(Gefs)); fs->root = newblk(Leaf); fs->height = 1; } int test(char *path) { Biobuf *bfd; char *e, *ln, *f[3]; int nf; Msg m; Kvp r; Key k; if((bfd = Bopen(path, OREAD)) == nil) sysfatal("open %s: %r", path); while((ln = Brdstr(bfd, '\n', 1)) != nil){ memset(f, 0, sizeof(f)); nf = tokenize(ln, f, nelem(f)); if(nf < 1 || strlen(f[0]) != 1) sysfatal("malformed test file"); switch(*f[0]){ case '#': break; case 'I': if(nf != 3) sysfatal("malformed insert"); m.type = Vinl; m.k = f[1]; m.v = f[2]; m.op = Ocreate; m.nk = strlen(f[1]); m.nv = strlen(f[2]); print("insert (%s, %s)\n", m.k, m.v); if(fsupsert(&m) == -1){ print("failed insert (%s, %s): %r\n", f[1], f[2]); return -1; } break; case 'D': if(nf != 2) sysfatal("malformed delete"); m.type = Vinl; m.op = Odelete; m.k = f[1]; m.v = nil; m.nk = strlen(f[1]); m.nv = 0; print("delete %s\n", f[1]); if(fsupsert(&m) == -1){ print("failed delete (%s): %r\n", f[1]); return -1; } break; case 'G': k.k = f[1]; k.nk = strlen(f[1]); e = fswalk1(&k, &r); if(e != nil){ print("failed lookup on (%s): %s\n", f[1], e); return -1; } break; case 'S': showfs("fs"); print("\n\n"); break; case 'C': checkfs(); break; case 'V': debug++; break; case 'X': exits(f[1]); break; } // if(!checkfs()) // abort(); free(ln); } return 0; } void main(int argc, char **argv) { int i; ARGBEGIN{ }ARGEND; init(); for(i = 0; i < argc; i++) if(test(argv[0]) == -1) sysfatal("test %s: %r\n", argv[i]); exits(nil); }