X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=util-vserver%2Flib%2Ftestsuite%2Fflags.c;h=d35188520ab24ea8fc51a5e2e7c7a115709de68c;hb=60ca70b0f3bf35f560a3d18d1b81cad6a7ed68b1;hp=45b70c1a9f4f488abc6761cfd860960d5a4e4436;hpb=5a2db7e8f0a6152962b555b4679c48e6bc1da136;p=util-vserver.git diff --git a/util-vserver/lib/testsuite/flags.c b/util-vserver/lib/testsuite/flags.c index 45b70c1..d351885 100644 --- a/util-vserver/lib/testsuite/flags.c +++ b/util-vserver/lib/testsuite/flags.c @@ -24,58 +24,143 @@ #include #include -#define TEST_T2F(X,Y,Z) assert(vc_text2flag(X,Y)==Z) -#define TEST_F2T(Y,X) { \ - char const *x=vc_hiflag2text(X); \ +#define TEST_T2F_C(X,Y,Z) assert(vc_text2flag_compat(X,Y)==Z) +#define TEST_F2T_C(Y,X) { \ + char const *x=vc_hiflag2text_compat(X); \ assert((x==0 && Y==0) || (x!=0 && Y!=0)); \ if (x!=0) assert(strcmp(x, Y)==0); \ } -#define TEST_LIST(STR,LEN,EXP,ERR_POS,ERR_LEN) { \ - char const *err_ptr; \ - size_t err_len; \ - char buf[] = STR; \ - uint32_t res; \ - res = vc_textlist2flag(buf, LEN, &err_ptr, &err_len); \ - assert(res==(EXP)); \ - assert(err_len==ERR_LEN); \ - if (ERR_POS==-1) assert(err_ptr==0); \ - else assert(err_ptr==buf+(ERR_POS)); \ +#define TEST_LIST_C(STR,LEN,EXP,ERR_POS,ERR_LEN) { \ + struct vc_err_listparser err; \ + char buf[] = STR; \ + uint32_t res; \ + res = vc_list2flag_compat(buf, LEN, &err); \ + assert(res==(EXP)); \ + assert(err.len==ERR_LEN); \ + if (ERR_POS==-1) assert(err.ptr==0); \ + else assert(err.ptr==buf+(ERR_POS)); \ } +//---- + +#define TEST_T2F(X,Y,Z) assert(vc_text2flag(X,Y)==Z) +#define TEST_F2T(Y,X) { \ + uint_least64_t x = (X); \ + char const *rc=vc_loflag2text(&x); \ + assert((rc==0 && Y==0) || (rc!=0 && Y!=0)); \ + if (rc!=0) assert(strcmp(rc, Y)==0); \ + } +#define TEST_LIST(STR,LEN,EXP_RES,EXP_FLAG,EXP_MASK,ERR_POS,ERR_LEN) { \ + struct vc_err_listparser err; \ + char buf[] = STR; \ + volatile int res; \ + struct vc_ctx_flags flags = {0,0}; \ + res = vc_list2flag(buf, LEN, &err, &flags); \ + assert(res==(EXP_RES)); \ + assert(flags.flagword==(EXP_FLAG)); \ + assert(flags.mask ==(EXP_MASK)); \ + assert(err.len==ERR_LEN); \ + if (ERR_POS==-1) assert(err.ptr==0); \ + else assert(err.ptr==buf+(ERR_POS)); \ + } + +#define ALL64 (~(uint_least64_t)(0)) int main() { - TEST_T2F("lock", 0, S_CTX_INFO_LOCK); - TEST_T2F("lockXXXX", 4, S_CTX_INFO_LOCK); - TEST_T2F("locXXXXX", 3, 0); - TEST_T2F("sched", 0, S_CTX_INFO_SCHED); - TEST_T2F("nproc", 0, S_CTX_INFO_NPROC); - TEST_T2F("private", 0, S_CTX_INFO_PRIVATE); - TEST_T2F("fakeinit", 0, S_CTX_INFO_INIT); - TEST_T2F("hideinfo", 0, S_CTX_INFO_HIDEINFO); - TEST_T2F("ulimit", 0, S_CTX_INFO_ULIMIT); + TEST_T2F_C("lock", 0, S_CTX_INFO_LOCK); + TEST_T2F_C("lockXXXX", 4, S_CTX_INFO_LOCK); + TEST_T2F_C("locXXXXX", 3, 0); + TEST_T2F_C("sched", 0, S_CTX_INFO_SCHED); + TEST_T2F_C("nproc", 0, S_CTX_INFO_NPROC); + TEST_T2F_C("private", 0, S_CTX_INFO_PRIVATE); + TEST_T2F_C("fakeinit", 0, S_CTX_INFO_INIT); + TEST_T2F_C("hideinfo", 0, S_CTX_INFO_HIDEINFO); + TEST_T2F_C("ulimit", 0, S_CTX_INFO_ULIMIT); + TEST_T2F_C("XXX", 0, 0); + TEST_T2F_C("", 0, 0); + + TEST_F2T_C("lock", S_CTX_INFO_LOCK); + TEST_F2T_C("sched", S_CTX_INFO_SCHED); + TEST_F2T_C("nproc", S_CTX_INFO_NPROC); + TEST_F2T_C("private", S_CTX_INFO_PRIVATE); + TEST_F2T_C("fakeinit", S_CTX_INFO_INIT); + TEST_F2T_C("hideinfo", S_CTX_INFO_HIDEINFO); + TEST_F2T_C("ulimit", S_CTX_INFO_ULIMIT); + TEST_F2T_C(0, 0); + TEST_F2T_C("ulimit", 64 | 128 | 23 ); + TEST_F2T_C("fakeinit", 23); + + TEST_LIST_C("lock", 0, S_CTX_INFO_LOCK, -1,0); + TEST_LIST_C("lock,sched,", 0, S_CTX_INFO_LOCK|S_CTX_INFO_SCHED, -1,0); + TEST_LIST_C("lock,XXX", 0, S_CTX_INFO_LOCK, 5,3); + TEST_LIST_C("", 0, 0, -1,0); + TEST_LIST_C("X", 0, 0, 0,1); + TEST_LIST_C("lock,sched,", 10, S_CTX_INFO_LOCK|S_CTX_INFO_SCHED, -1,0); + + //------- + + TEST_T2F("fakeinit", 0, VC_VXF_INFO_INIT); TEST_T2F("XXX", 0, 0); TEST_T2F("", 0, 0); - - TEST_F2T("lock", S_CTX_INFO_LOCK); - TEST_F2T("sched", S_CTX_INFO_SCHED); - TEST_F2T("nproc", S_CTX_INFO_NPROC); - TEST_F2T("private", S_CTX_INFO_PRIVATE); - TEST_F2T("fakeinit", S_CTX_INFO_INIT); - TEST_F2T("hideinfo", S_CTX_INFO_HIDEINFO); - TEST_F2T("ulimit", S_CTX_INFO_ULIMIT); + + TEST_F2T("fakeinit", VC_VXF_INFO_INIT); TEST_F2T(0, 0); - TEST_F2T("ulimit", 64 | 128 | 23 ); - TEST_F2T("fakeinit", 23); - TEST_LIST("lock", 0, S_CTX_INFO_LOCK, -1,0); - TEST_LIST("lock,sched,", 0, S_CTX_INFO_LOCK|S_CTX_INFO_SCHED, -1,0); - TEST_LIST("lock,XXX", 0, S_CTX_INFO_LOCK, 5,3); - TEST_LIST("", 0, 0, -1,0); - TEST_LIST("X", 0, 0, 0,1); - TEST_LIST("lock,sched,", 10, S_CTX_INFO_LOCK|S_CTX_INFO_SCHED, -1,0); + TEST_LIST("fakeinit", 0, 0, VC_VXF_INFO_INIT, VC_VXF_INFO_INIT,-1,0); + TEST_LIST("~fakeinit", 0, 0, 0, VC_VXF_INFO_INIT,-1,0); + TEST_LIST("!fakeinit", 0, 0, 0, VC_VXF_INFO_INIT,-1,0); + TEST_LIST("fakeinit,XXX", 0, -1, VC_VXF_INFO_INIT, VC_VXF_INFO_INIT, 9,3); + TEST_LIST("", 0, 0, 0, 0, -1,0); + TEST_LIST("X", 0, -1, 0, 0, 0,1); + TEST_LIST("all", 0, 0, ALL64, ALL64, -1,0); + TEST_LIST("ALL", 0, 0, ALL64, ALL64, -1,0); + TEST_LIST("any", 0, 0, ALL64, ALL64, -1,0); + TEST_LIST("ANY", 0, 0, ALL64, ALL64, -1,0); + TEST_LIST("~all", 0, 0, 0, ALL64, -1,0); + TEST_LIST("~ALL", 0, 0, 0, ALL64, -1,0); + TEST_LIST("all,~fakeinit",0, 0, ~VC_VXF_INFO_INIT,ALL64, -1,0); + TEST_LIST("~all,fakeinit",0, 0, VC_VXF_INFO_INIT, ALL64, -1,0); + TEST_LIST("fakeinit,~all",0, 0, 0, ALL64, -1,0); + TEST_LIST("~", 0, -1, 0, 0, 1,0); + TEST_LIST("fakeinit,~", 0, -1, VC_VXF_INFO_INIT, VC_VXF_INFO_INIT,10,0); + TEST_LIST("1", 0, 0, 1, 1, -1,0); + TEST_LIST("1,23,42", 0, 0, 1|23|42, 1|23|42, -1,0); + TEST_LIST("~1", 0, 0, 0, 1, -1,0); + TEST_LIST("42,fakeinit", 0, 0, VC_VXF_INFO_INIT|42, VC_VXF_INFO_INIT|42, -1,0); + TEST_LIST("42x,1", 0, -1, 0, 0, 0,3); + + TEST_LIST("^4,~^2", 0, 0, 0x10, 0x14, -1,0); + + TEST_LIST("lock,nproc,private,fakeinit,hide,ulimit,nspace,hard,prio,pause,mem,uptime,setup,init", + 0, 0, + VC_VXF_INFO_LOCK|VC_VXF_INFO_NPROC|VC_VXF_INFO_PRIVATE|VC_VXF_INFO_INIT| + VC_VXF_INFO_HIDE|VC_VXF_INFO_ULIMIT|VC_VXF_INFO_NSPACE| + VC_VXF_SCHED_HARD|VC_VXF_SCHED_PRIO|VC_VXF_SCHED_PAUSE| + VC_VXF_VIRT_MEM|VC_VXF_VIRT_UPTIME| + VC_VXF_STATE_SETUP|VC_VXF_STATE_INIT, + + VC_VXF_INFO_LOCK|VC_VXF_INFO_NPROC|VC_VXF_INFO_PRIVATE|VC_VXF_INFO_INIT| + VC_VXF_INFO_HIDE|VC_VXF_INFO_ULIMIT|VC_VXF_INFO_NSPACE| + VC_VXF_SCHED_HARD|VC_VXF_SCHED_PRIO|VC_VXF_SCHED_PAUSE| + VC_VXF_VIRT_MEM|VC_VXF_VIRT_UPTIME| + VC_VXF_STATE_SETUP|VC_VXF_STATE_INIT, + + -1,0); + + TEST_LIST("~lock,~nproc,~private,~fakeinit,~hide,~ulimit,~nspace,~hard,~prio,~pause,~mem,~uptime,~setup,~init", + 0, 0, + 0, + VC_VXF_INFO_LOCK|VC_VXF_INFO_NPROC|VC_VXF_INFO_PRIVATE|VC_VXF_INFO_INIT| + VC_VXF_INFO_HIDE|VC_VXF_INFO_ULIMIT|VC_VXF_INFO_NSPACE| + VC_VXF_SCHED_HARD|VC_VXF_SCHED_PRIO|VC_VXF_SCHED_PAUSE| + VC_VXF_VIRT_MEM|VC_VXF_VIRT_UPTIME| + VC_VXF_STATE_SETUP|VC_VXF_STATE_INIT, + -1,0); + + return 0; }