#define _LARGEFILE64_SOURCE /* needed to use lseek64 */

#include <stdio.h> 
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <parlib/arch/arch.h>
#include <unistd.h>
#include <errno.h>
#include <dirent.h>
#include <stdlib.h>
#include <string.h>
#include <parlib/parlib.h>

#include <utest/utest.h>

TEST_SUITE("FILE POSIX");

/* <--- Begin definition of test cases ---> */

bool test_openat(void)
{
	int dfd = open("/dir1", O_RDONLY);
	UT_ASSERT(dfd >= 0);

	int ffd = openat(dfd, "f1.txt", O_RDWR);
	UT_ASSERT(ffd >= 0, close(dfd));

	close(ffd);
	close(dfd);
	return TRUE;
}

/* This tests opening a lot of files, enough to grow our file/chan table, then
 * forking/spawning with DUP_FGRP.  It caused a panic at one point. */
bool test_open_lots_and_spawn(void)
{
	char *p_argv[] = {0, 0, 0};
	char *p_envp[] = {"LD_LIBRARY_PATH=/lib", 0};
	#define NR_LOOPS 128
	int fd[NR_LOOPS];
	int pid;
	const char *filename = "/bin/hello";

	/* the kernel-internal number is 32 at the moment. */
	for (int i = 0; i < NR_LOOPS; i++) {
		fd[i] = open("hello.txt", O_RDONLY);
		UT_ASSERT(fd[i] >= 0);
	}
	pid = sys_proc_create(filename, strlen(filename), p_argv, p_envp,
	                      PROC_DUP_FGRP);
	UT_ASSERT(pid > 0);
	sys_proc_destroy(pid, 0);
	for (int i = 0; i < NR_LOOPS; i++)
		close(fd[i]);
	return TRUE;
}

bool test_pipe_dup2(void)
{
	int pipefd[2];
	int ret;

	ret = pipe(pipefd);
	UT_ASSERT(!ret);
	ret = dup2(pipefd[0], 100);
	UT_ASSERT(ret == 100);
	ret = close(100);
	UT_ASSERT(!ret);
	ret = close(pipefd[0]);
	UT_ASSERT(!ret);
	ret = close(pipefd[1]);
	UT_ASSERT(!ret);
	return TRUE;
}

/* <--- End definition of test cases ---> */

struct utest utests[] = {
	UTEST_REG(openat),
	UTEST_REG(open_lots_and_spawn),
	UTEST_REG(pipe_dup2),
};
int num_utests = sizeof(utests) / sizeof(struct utest);

int main(int argc, char *argv[])
{
	char **whitelist = &argv[1];
	int whitelist_len = argc - 1;

	RUN_TEST_SUITE(utests, num_utests, whitelist, whitelist_len);
}
