X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=system%2Fhooks%2Fnode%2Fsupport%2Fvsys_conctest.c;fp=system%2Fhooks%2Fnode%2Fsupport%2Fvsys_conctest.c;h=587d531dd0dcc5cafc3d535b23999d3a69434b91;hb=ab1742cec9707654d574cd62199d811fc5a79b1d;hp=0000000000000000000000000000000000000000;hpb=33db9af58df8abbc61a00f9b9b74f624758c20e8;p=tests.git diff --git a/system/hooks/node/support/vsys_conctest.c b/system/hooks/node/support/vsys_conctest.c new file mode 100644 index 0000000..587d531 --- /dev/null +++ b/system/hooks/node/support/vsys_conctest.c @@ -0,0 +1,144 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define IMAPIG 1024 + +int main(int argc,char *argv[]) +{ + FILE *fp = NULL, *fp_in = NULL; + FILE *out_fp = NULL, *diff_fp = NULL; + + if (argc<2) { + printf("usage: vsys_conctest \n"); + exit(-1); + } + const char topcmd[IMAPIG]; + const char top_in_file[IMAPIG]; + char buf[IMAPIG*8]; + int fd_in = -1, fd_out; + int res; + int flag,flag2; + int count = 1; + struct timeval tv={.tv_sec=5,.tv_usec=0}; + + sprintf(topcmd,"%s/vsys/test.out",argv[1]); + sprintf(top_in_file,"%s/vsys/test.in",argv[1]); + while (count < 10000) { + fd_set readSet; + int res; + int nlines=0; + + + printf("(%d)", count);fflush(stdout); + if ((fd_out = open(topcmd, O_RDONLY | O_NONBLOCK)) < 0) { + fprintf(stderr, "error executing top\n"); + exit(-1); + } + + + while ((fd_in = open(top_in_file, O_WRONLY| O_NONBLOCK)) < 0) { + //fprintf(stderr, "Waiting for %s (%s)\n", top_in_file,strerror(errno)); + usleep (50); + } + + + if ((flag = fcntl(fd_out, F_GETFL)) == -1) { + printf("fcntl get failed\n"); + exit(-1); + } + + + + if ((flag2 = fcntl(fd_in, F_GETFL)) == -1) { + printf("fcntl get failed\n"); + exit(-1); + } + + + + while (1) { + FD_ZERO(&readSet); + FD_SET(fd_out, &readSet); + + + res = select(fd_out + 1, &readSet, NULL, NULL, NULL); + + if (res < 0) { + if (errno == EINTR || errno == EAGAIN) { + printf("."); + continue; + } + fprintf(stderr,"select failed errno=%d errstr=%s\n", errno, strerror(errno)); + exit(-1); + } + break; /* we're done */ + } + + + if (fcntl(fd_out, F_SETFL, flag & ~O_NONBLOCK) == -1) { + printf("fcntl set failed\n"); + exit(-1); + } + + + + if ((flag = fcntl(fd_out, F_GETFL)) == -1) { + printf("fcntl get failed\n"); + exit(-1); + } + + + + + if (fcntl(fd_in, F_SETFL, flag2 & ~O_NONBLOCK) == -1) { + printf("fcntl set failed\n"); + exit(-1); + } + + + if ((flag2 = fcntl(fd_in, F_GETFL)) == -1) { + printf("fcntl get failed\n"); + exit(-1); + } + + + if (flag & O_NONBLOCK == 0) { + printf("fd_out still nonblocking\n"); + exit(-1); + } + + if (flag & O_NONBLOCK == 0) { + printf("fd_in still nonblocking\n"); + exit(-1); + } + if ((fp = fdopen(fd_out, "r")) == NULL) { + printf("fdopen failed\n"); + exit(-1); + } + + while (fgets(buf, sizeof(buf), fp) != NULL) { + nlines++; + } + + if (nlines<5) { + printf("Test returned different results - run again to verify\n"); + printf("%s\n",buf); + exit(-1); + } + + fclose(fp); + close(fd_in); + close(fd_out); + count++; + } + printf("test successful.\n"); + exit(0); + +}