File:  [MW Coherent from dump] / coherent / b / kernel / tools / pipetest.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed May 29 04:56:37 2019 UTC (7 years ago) by root
Branches: MarkWilliams, MAIN
CVS tags: relic, HEAD
coherent

/*
 * test of named pipes
 */
#include <fcntl.h>
#include <signal.h>

int alarmed;
int myalrm();

char * pname = "PIPE";
int fd;
char buf[80];
int nread;
#define PLIMIT 64000

main(argc, argv)
int argc;
char ** argv;
{
	/*
	 * Get name of pipe to play with - default to "PIPE".
	 */
	if (argc > 1) {
		pname = argv[1];
	}
	printf("Using pipe %s\n", pname);
	if (signal(SIGALRM, myalrm) == SIG_ERR)
		perror("pipetest: set alarm sig");

	test1();
	test2();
	test3();
	test4();
	test5();
	test6();
	test7();
	test8();

	printf("Done.\n");
}

test1()
{
	/*
	 * Open read-only test; no process has pipe open for write.
	 */
	printf("\nTEST #1\n");
	printf("Open O_RDONLY, pipe not open elsewhere.\n");
	alarmed = 0;
	alarm(2);
	if ((fd = open(pname, O_RDONLY, 0)) != -1) {
		printf("TEST #1 failed. Unexpected successful open.\n");
		close(fd);
	} else {
		perror("test#1: open");
		if (alarmed)
			printf("TEST #1 passed.  Open timed out.\n");
		else
			printf("TEST #1 failed.  Open did not time out.\n");
	}
	alarm(0);
}

test2()
{
	/*
	 * Open read-only with no delay; no process has pipe open for write.
	 */
	printf("\nTEST #2\n");
	printf("Open O_RDONLY|O_NDELAY, pipe not open elsewhere.\n");
	alarmed = 0;
	alarm(2);
	if ((fd = open(pname, O_RDONLY | O_NDELAY, 0)) != -1) {
		printf("TEST #2 passed.  Open succeeded.\n");
		close(fd);
	} else {
		perror("test#2: open");
		if (alarmed)
			printf("TEST #2 failed.  Open timed out.\n");
		else
			printf("TEST #2 failed.  Open did not time out.\n");
	}
	alarm(0);
}

test3()
{
	/*
	 * Open write-only test; no process has pipe open for read.
	 */
	printf("\nTEST #3\n");
	printf("Open O_WRONLY, pipe not open elsewhere.\n");
	alarmed = 0;
	if (signal(SIGALRM, myalrm) == SIG_ERR)
		perror("test#3: set alarm sig");
	alarm(2);
	if ((fd = open(pname, O_WRONLY, 0)) != -1) {
		printf("TEST #3 failed. Unexpected successful open.\n");
		close(fd);
	} else {
		perror("test#3: open");
		if (alarmed)
			printf("TEST #3 passed.  Open timed out.\n");
		else
			printf("TEST #3 failed.  Open did not time out.\n");
	}
	alarm(0);
}

test4()
{
	/*
	 * Open write-only with no delay; no process has pipe open for read.
	 */
	printf("\nTEST #4\n");
	printf("Open O_WRONLY|O_NDELAY, pipe not open elsewhere.\n");
	alarmed = 0;
	alarm(2);
	if ((fd = open(pname, O_RDONLY | O_NDELAY, 0)) != -1) {
		printf("TEST #4 passed.  Open succeeded.\n");
		close(fd);
	} else {
		perror("test#4: open");
		if (alarmed)
			printf("TEST #4 failed.  Open timed out.\n");
		else
			printf("TEST #4 failed.  Open did not time out.\n");
	}
	alarm(0);
}

test5()
{
	/*
	 * Read pipe, no data.
	 */
	printf("\nTEST #5\n");
	printf("Read pipe, no data.\n");
	if ((fd = open(pname, O_RDWR, 0)) == -1) {
		perror("test#5: open O_RDWR");
		printf("TEST #5 failed.  Open failed.\n");
	} else {
		alarmed = 0;
		alarm(2);
		nread = read(fd, buf, 80);
		if (nread < 0) {
			perror("test#5: read");
			if (alarmed)
				printf("TEST #5 passed.  Read timed out.\n");
			else
				printf(
				  "TEST #5 failed.  Read did not time out.\n");
		} else {
			printf(
			  "TEST #5 failed.  Read returned %d.\n", nread);
		}
		close(fd);
	}
	alarm(0);
}

test6()
{
	/*
	 * Partial read.
	 */
	printf("\nTEST #6\n");
	printf("Read pipe, partial data.\n");
	if ((fd = open(pname, O_RDWR, 0)) == -1) {
		perror("test#6: open O_RDWR");
		printf("TEST #6 failed.  Open failed.\n");
	} else {
		alarmed = 0;
		alarm(2);
		write(fd, "Hello", 5);
		nread = read(fd, buf, 80);
		if (nread < 0) {
			perror("test#6: read");
			if (alarmed)
				printf("TEST #6 failed.  Read timed out.\n");
			else
				printf(
				  "TEST #6 failed.  Read did not time out.\n");
		} else {
			printf(
			  "TEST #6 passed.  Read returned %d.\n", nread);
		}
		close(fd);
	}
	alarm(0);

}

test7()
{
	int wr_ct, nwrit;
	/*
	 * Write pipe until no room.
	 */
	printf("\nTEST #7\n");
	printf("Write pipe until no room.\n");
	if ((fd = open(pname, O_RDWR, 0)) == -1) {
		perror("test#7: open O_RDWR");
		printf("TEST #7 failed.  Open failed.\n");
	} else {
		alarmed = 0;
		for (wr_ct = 0; wr_ct < PLIMIT; wr_ct += 80) {
			alarm(2);
			nwrit = write(fd, buf, 80);
			if (nwrit > 0)
				wr_ct += nwrit;
			else if (nwrit == 0) {
		printf("TEST #7 failed.  Write failed.\n");
				break;
			} else {
				perror("test#7: write");
				if (alarmed)
printf("TEST #7 passed.  Write timed out.\n");
				else
printf("TEST #7 failed.  Write did not time out.\n");
				break;
			}
		}
		alarm(0);
		printf("%d bytes written\n", wr_ct);
		close(fd);
	}
}

test8()
{
	int wr_ct, nwrit;
	/*
	 * Write pipe until no room.
	 */
	printf("\nTEST #8\n");
	printf("Write pipe until no room, no delay.\n");
	if ((fd = open(pname, O_RDWR|O_NDELAY, 0)) == -1) {
		perror("test#8: open O_RDWR|O_NDELAY");
		printf("TEST #8 failed.  Open failed.\n");
	} else {
		alarmed = 0;
		for (wr_ct = 0; wr_ct < PLIMIT; wr_ct += 80) {
			alarm(2);
			nwrit = write(fd, buf, 80);
			if (nwrit > 0)
				wr_ct += nwrit;
			else if (nwrit == 0) {
		printf("TEST #8 Passed.  Write failed.\n");
				break;
			} else {
				perror("test#8: write");
				if (alarmed)
printf("TEST #8 failed.  Write timed out.\n");
				else
printf("TEST #8 failed.  Write did not time out.\n");
				break;
			}
		}
		alarm(0);
		printf("%d bytes written\n", wr_ct);
		close(fd);
	}
}

int
myalrm()
{
	if (signal(SIGALRM, myalrm) == SIG_ERR)
		perror("set alarm sig");
	alarmed = 1;
}

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.