void test5(int c) { Chan **ca = mkchan(c, 8); changeNproc(2); go( sel(ca[4], ca[5], ca[6], ca[7], ca[0], ca[1], ca[2], ca[3]) ); go( sel(ca[0], ca[1], ca[2], ca[3], ca[4], ca[5], ca[6], ca[7]) ); }
// select send to select recv void test4(int c) { Chan **ca = mkchan(c, 4); changeNproc(2); go( sel(nc, nc, nc, nc, ca[0], ca[1], ca[2], ca[3]) ); go( sel(ca[0], ca[1], ca[2], ca[3], nc, nc, nc, nc) ); }
__attribute__((unused)) static void fstest_task(void) { int chan; char path[PATH_MAX+1]; printf("path_max test\n"); memset(path, 'a', PATH_MAX); path[PATH_MAX] = 0; printf(" mkchan: %d\n", mkchan(ROOT_DIRFD, path)); printf(" open: %d\n", chan=open(ROOT_DIRFD, path)); printf(" rmchan: %d\n", rmchan(ROOT_DIRFD, path)); printf(" close: %d\n", close(chan)); for(int i=0; i<100; ++i) { sprintf(path, "/tmp/test%d", i); ASSERTNOERR(mkchan(ROOT_DIRFD, path)); ASSERTNOERR(chan=open(ROOT_DIRFD, path)); ASSERTNOERR(rmchan(ROOT_DIRFD, path)); ASSERTNOERR(close(chan)); } }
// select send to direct recv void test3(int c) { Chan **ca = mkchan(c, 4); changeNproc(4); go( myRecv(ca[0]) ); go( myRecv(ca[1]) ); go( myRecv(ca[2]) ); go( myRecv(ca[3]) ); changeNproc(1); go( sel(nc, nc, nc, nc, ca[0], ca[1], ca[2], ca[3]) ); }
// direct send to select recv void test2(int c) { Chan **ca = mkchan(c, 4); changeNproc(4); go( mySend(ca[0]) ); go( mySend(ca[1]) ); go( mySend(ca[2]) ); go( mySend(ca[3]) ); changeNproc(1); go( sel(ca[0], ca[1], ca[2], ca[3], nc, nc, nc, nc) ); }
void test6(int c) { Chan **ca = mkchan(c, 12); changeNproc(4); go( mySend(ca[4]) ); go( mySend(ca[5]) ); go( mySend(ca[6]) ); go( mySend(ca[7]) ); changeNproc(4); go( myRecv(ca[8]) ); go( myRecv(ca[9]) ); go( myRecv(ca[10]) ); go( myRecv(ca[11]) ); changeNproc(2); go( sel(ca[4], ca[5], ca[6], ca[7], ca[0], ca[1], ca[2], ca[3]) ); go( sel(ca[0], ca[1], ca[2], ca[3], ca[8], ca[9], ca[10], ca[11]) ); }
unsigned int cmd_join(callbackp *callbacki) { CHANNEL *jchan; RAW *newraw; json *jlist; BANNED *blist; if ((jchan = getchan(callbacki->param[2], callbacki->g_ape)) == NULL) { jchan = mkchan(callbacki->param[2], "Default%20Topic", callbacki->g_ape); if (jchan == NULL) { send_error(callbacki->call_user, "CANT_JOIN_CHANNEL", "202", callbacki->g_ape); } else { join(callbacki->call_user, jchan, callbacki->g_ape); } } else if (isonchannel(callbacki->call_user, jchan)) { send_error(callbacki->call_user, "ALREADY_ON_CHANNEL", "100", callbacki->g_ape); } else { blist = getban(jchan, callbacki->call_user->ip); if (blist != NULL) { jlist = NULL; set_json("reason", blist->reason, &jlist); set_json("error", "YOU_ARE_BANNED", &jlist); /* TODO: Add Until */ newraw = forge_raw(RAW_ERR, jlist); post_raw(newraw, callbacki->call_user, callbacki->g_ape); } else { join(callbacki->call_user, jchan, callbacki->g_ape); } } return (FOR_NOTHING); }
// run all tests with specified buffer size void tests(int c) { Chan **ca = mkchan(c, 4); test1(ca[0]); test1(ca[1]); test1(ca[2]); test1(ca[3]); myWait(); test2(c); myWait(); test3(c); myWait(); test4(c); myWait(); test5(c); myWait(); test6(c); myWait(); }