#include <ccan/oserver/oserver.h>
#include <ccan/oserver/oserver.c>
#include <ccan/str/str.h>
+#include <ccan/array_size/array_size.h>
#include <ccan/tap/tap.h>
#include <sys/types.h>
#include <sys/stat.h>
int main(void)
{
- int fd;
+ int fd, i;
int status;
char buf[200];
+ const char *input[] = { "This is a test\n",
+ "This is a test\r",
+ "This is a test\r\n",
+ "This is a test\nWith extra",
+ "This is a test\rWith extra",
+ "This is a test\r\nWith extra" };
/* This is how many tests you plan to run */
- plan_tests(3);
+ plan_tests(4 * ARRAY_SIZE(input));
- fd = open("run-fd", O_RDWR|O_CREAT|O_TRUNC, 0600);
- write(fd, "This is a test\n", sizeof("This is a test\n"));
- lseek(fd, 0, SEEK_SET);
+ for (i = 0; i < ARRAY_SIZE(input); i++) {
+ fd = open("run-fd", O_RDWR|O_CREAT|O_TRUNC, 0600);
- if (fork() == 0)
- oserver_serve(fd);
+ write(fd, input[i], strlen(input[i]));
+ lseek(fd, 0, SEEK_SET);
- wait(&status);
+ if (fork() == 0)
+ oserver_serve(fd);
- ok1(WIFEXITED(status));
- ok1(WEXITSTATUS(status) == 0);
+ wait(&status);
- lseek(fd, 0, SEEK_SET);
- buf[read(fd, buf, sizeof(buf)-1)] = '\0';
+ ok1(WIFEXITED(status));
+ ok1(WEXITSTATUS(status) == 0);
- ok1(streq(buf, "This is a test\n"
- "Louder, like this: 'THIS IS A TEST'\r\n"));
+ lseek(fd, 0, SEEK_SET);
+ buf[read(fd, buf, sizeof(buf)-1)] = '\0';
+ ok1(strncmp(buf, input[i], strlen("This is a test")) == 0);
+ ok1(streq(buf + strlen("This is a test") + 1,
+ "Louder, like this: 'THIS IS A TEST'\r\n"));
+ }
+
/* This exits depending on whether all tests passed */
return exit_status();
}