// SPDX-License-Identifier: GPL-2.0

/* kselftest for acct() system call
 *  The acct() system call enables or disables process accounting.
 */

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <sys/wait.h>

#include "kselftest.h"

int main(void)
{
	char filename[] = "process_log";
	FILE *fp;
	pid_t child_pid;
	int sz;

	// Setting up kselftest framework
	ksft_print_header();
	ksft_set_plan(1);

	// Check if test is run a root
	if (geteuid()) {
		ksft_exit_skip("This test needs root to run!\n");
		return 1;
	}

	// Create file to log closed processes
	fp = fopen(filename, "w");

	if (!fp) {
		ksft_test_result_error("%s.\n", strerror(errno));
		ksft_finished();
		return 1;
	}

	acct(filename);

	// Handle error conditions
	if (errno) {
		ksft_test_result_error("%s.\n", strerror(errno));
		fclose(fp);
		ksft_finished();
		return 1;
	}

	// Create child process and wait for it to terminate.

	child_pid = fork();

	if (child_pid < 0) {
		ksft_test_result_error("Creating a child process to log failed\n");
		acct(NULL);
		return 1;
	} else if (child_pid > 0) {
		wait(NULL);
		fseek(fp, 0L, SEEK_END);
		sz = ftell(fp);

		acct(NULL);

		if (sz <= 0) {
			ksft_test_result_fail("Terminated child process not logged\n");
			ksft_exit_fail();
			return 1;
		}

		ksft_test_result_pass("Successfully logged terminated process.\n");
		fclose(fp);
		ksft_exit_pass();
		return 0;
	}

	return 1;
}
