Files
mckernel/test/926/C926.c
Tomoki Shirasawa 6602cf442c add test cases
2018-06-07 10:04:33 +09:00

588 lines
9.9 KiB
C

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/wait.h>
#include <sys/ipc.h>
#include <sys/shm.h>
int
main(int argc, char **argv)
{
pid_t pid1;
pid_t pid2;
pid_t pid3;
int st;
int p[2];
int shmid;
int *sp;
key_t key;
int valid1;
int valid2;
int valid3;
char c;
int result;
struct shmid_ds buf;
key = ftok(argv[0], 0);
printf("C926T01... ");
fflush(stdout);
valid1 = 1;
valid2 = 2;
valid3 = 2;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
// step 1
st = *sp == valid1? 1: 0;
shmdt(sp);
write(p[1], &c, 1);
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 2
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
// step 3
st = *sp == valid2? 1: 0;
shmdt(sp);
// step 4
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T02... ");
fflush(stdout);
valid1 = 1;
valid2 = 2;
valid3 = 2;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
// step 1
st = *sp == valid1? 1: 0;
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 2
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
// step 3
st = *sp == valid2? 1: 0;
shmdt(sp);
// step 4
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T03... ");
fflush(stdout);
valid1 = 1;
valid2 = 1;
valid3 = 1;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
// step 1
shmctl(shmid, IPC_RMID, &buf);
write(p[1], &c, 1);
// step3
read(p[1], &c, 1);
st = *sp == valid1? 1: 0;
shmdt(sp);
write(p[1], &c, 1);
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 2
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
write(p[0], &c, 1);
// step 4
read(p[0], &c, 1);
st = *sp == valid2? 1: 0;
shmdt(sp);
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T04... ");
fflush(stdout);
valid1 = 1;
valid2 = 1;
valid3 = 1;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
// step 1
shmctl(shmid, IPC_RMID, &buf);
write(p[1], &c, 1);
// step4
read(p[1], &c, 1);
st = *sp == valid1? 1: 0;
shmdt(sp);
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 2
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
// step 3
st = *sp == valid2? 1: 0;
shmdt(sp);
write(p[0], &c, 1);
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T05... ");
fflush(stdout);
valid1 = 1;
valid2 = 1;
valid3 = 1;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
// step 1
shmctl(shmid, IPC_RMID, &buf);
// step2
st = *sp == valid1? 1: 0;
shmdt(sp);
write(p[1], &c, 1);
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 3
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
// step 4
st = *sp == valid2? 1: 0;
shmdt(sp);
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T06... ");
fflush(stdout);
valid1 = 1;
valid2 = 1;
valid3 = 1;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
// step 1
shmctl(shmid, IPC_RMID, &buf);
// step2
st = *sp == valid1? 1: 0;
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 3
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
// step 4
st = *sp == valid2? 1: 0;
shmdt(sp);
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T07... ");
fflush(stdout);
valid1 = 2;
valid2 = 2;
valid3 = 0;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
write(p[1], &c, 1);
// step 2
read(p[1], &c, 1);
shmctl(shmid, IPC_RMID, &buf);
// step2
st = *sp == valid1? 1: 0;
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 1
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
write(p[0], &c, 1);
// step 3
read(p[0], &c, 1);
st = *sp == valid2? 1: 0;
shmdt(sp);
// step 4
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
printf("C926T08... ");
fflush(stdout);
valid1 = 2;
valid2 = 2;
valid3 = 2;
if (socketpair(AF_UNIX, SOCK_STREAM, 0, p) == -1) {
perror("socketpair");
exit(1);
}
if ((pid1 = fork()) == 0) {
close(p[0]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 0
sp = shmat(shmid, NULL, 0);
*sp = 1;
write(p[1], &c, 1);
// step 2
read(p[1], &c, 1);
// step2
st = *sp == valid1? 1: 0;
exit(st);
}
if ((pid2 = fork()) == 0) {
close(p[1]);
shmid = shmget(key, 4096, IPC_CREAT | 0660);
// step 1
read(p[0], &c, 1);
sp = shmat(shmid, NULL, 0);
(*sp)++;
write(p[0], &c, 1);
// step 3
read(p[0], &c, 1);
st = *sp == valid2? 1: 0;
shmdt(sp);
// step 4
exit(st);
}
close(p[0]);
close(p[1]);
result = 0;
waitpid(pid1, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
waitpid(pid2, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if ((pid3 = fork()) == 0) {
// step 5
shmid = shmget(key, 4096, IPC_CREAT | 0660);
sp = shmat(shmid, NULL, 0);
st = *sp == valid3? 1: 0;
shmdt(sp);
exit(st);
}
waitpid(pid3, &st, 0);
if (WIFEXITED(st))
result += WEXITSTATUS(st);
if (result == 3) {
printf("OK\n");
}
else {
printf("NG\n");
}
exit(0);
}