#8 Import a subset of RHEL's tests
Merged 2 years ago by codonell. Opened 2 years ago by vkadlcik.
Unknown source rawhide  into  rawhide

@@ -0,0 +1,64 @@

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Makefile of /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support

+ #   Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?)

+ #   Author: Edjunior Machado <emachado@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2018 Red Hat, Inc.

+ #

+ #   This program is free software: you can redistribute it and/or

+ #   modify it under the terms of the GNU General Public License as

+ #   published by the Free Software Foundation, either version 2 of

+ #   the License, or (at your option) any later version.

+ #

+ #   This program is distributed in the hope that it will be

+ #   useful, but WITHOUT ANY WARRANTY; without even the implied

+ #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

+ #   PURPOSE.  See the GNU General Public License for more details.

+ #

+ #   You should have received a copy of the GNU General Public License

+ #   along with this program. If not, see http://www.gnu.org/licenses/.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ export TEST=/tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support

+ export TESTVERSION=1.0

+ 

+ BUILT_FILES=

+ 

+ FILES=$(METADATA) runtest.sh Makefile PURPOSE

+ 

+ .PHONY: all install download clean

+ 

+ run: $(FILES) build

+ 	./runtest.sh

+ 

+ build: $(BUILT_FILES)

+ 	test -x runtest.sh || chmod a+x runtest.sh

+ 

+ clean:

+ 	rm -f *~ $(BUILT_FILES)

+ 

+ 

+ include /usr/share/rhts/lib/rhts-make.include

+ 

+ $(METADATA): Makefile

+ 	@echo "Owner:           Edjunior Machado <emachado@redhat.com>" > $(METADATA)

+ 	@echo "Name:            $(TEST)" >> $(METADATA)

+ 	@echo "TestVersion:     $(TESTVERSION)" >> $(METADATA)

+ 	@echo "Path:            $(TEST_DIR)" >> $(METADATA)

+ 	@echo "Description:     Test for BZ#1449588 (Can ltrace be built with backtrace support?)" >> $(METADATA)

+ 	@echo "Type:            Sanity" >> $(METADATA)

+ 	@echo "TestTime:        5m" >> $(METADATA)

+ 	@echo "RunFor:          ltrace" >> $(METADATA)

+ 	@echo "Requires:        ltrace" >> $(METADATA)

+ 	@echo "Priority:        Normal" >> $(METADATA)

+ 	@echo "License:         GPLv2+" >> $(METADATA)

+ 	@echo "Confidential:    no" >> $(METADATA)

+ 	@echo "Destructive:     no" >> $(METADATA)

+ 	@echo "Bug:             1449588" >> $(METADATA)

+ 	@echo "Releases:        -RHEL4 -RHELClient5 -RHELServer5" >> $(METADATA)

+ 

+ 	rhts-lint $(METADATA)

@@ -0,0 +1,5 @@

+ PURPOSE of /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support

+ Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?)

+ Author: Edjunior Machado <emachado@redhat.com>

+ Bug summary: Can ltrace be built with backtrace support?

+ Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1449588

@@ -0,0 +1,16 @@

+ summary: Test for BZ#1449588 (Can ltrace be built with backtrace support?)

+ description: |

+     Bug summary: Can ltrace be built with backtrace support?

+     Bugzilla link: https://bugzilla.redhat.com/show_bug.cgi?id=1449588

+ contact: Edjunior Machado <emachado@redhat.com>

+ component:

+ - ltrace

+ test: ./runtest.sh

+ framework: beakerlib

+ recommend:

+ - ltrace

+ duration: 5m

+ link:

+ -   relates: https://bugzilla.redhat.com/show_bug.cgi?id=1449588

+ extra-summary: /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support

+ extra-task: /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support

@@ -0,0 +1,53 @@

+ #!/bin/bash

+ # vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   runtest.sh of /tools/ltrace/Sanity/bz1449588-Can-ltrace-be-built-with-backtrace-support

+ #   Description: Test for BZ#1449588 (Can ltrace be built with backtrace support?)

+ #   Author: Edjunior Machado <emachado@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2018 Red Hat, Inc.

+ #

+ #   This program is free software: you can redistribute it and/or

+ #   modify it under the terms of the GNU General Public License as

+ #   published by the Free Software Foundation, either version 2 of

+ #   the License, or (at your option) any later version.

+ #

+ #   This program is distributed in the hope that it will be

+ #   useful, but WITHOUT ANY WARRANTY; without even the implied

+ #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

+ #   PURPOSE.  See the GNU General Public License for more details.

+ #

+ #   You should have received a copy of the GNU General Public License

+ #   along with this program. If not, see http://www.gnu.org/licenses/.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ # Include Beaker environment

+ . /usr/share/beakerlib/beakerlib.sh || exit 1

+ 

+ CMD="ltrace"

+ PACKAGE=$(rpm -qf $(which $CMD))

+ 

+ rlJournalStart

+     rlPhaseStartSetup

+         rlAssertRpm $PACKAGE

+         rlRun "TmpDir=\$(mktemp -d)" 0 "Creating tmp directory"

+         rlRun "pushd $TmpDir"

+     rlPhaseEnd

+ 

+     rlPhaseStartTest

+         set -o pipefail

+         rlRun -l "ltrace --help |& tee help-output.log" 0 "Collecting help output"

+         rlRun -l "grep -- '-w, --where=NR.*print backtrace showing NR stack frames at most.' help-output.log" 0 "Checking if '-w, --where=NR' parameter is available on help output"

+         rlRun -l "ltrace -w 4 /bin/ls" 0 "Trivial smoke test"

+     rlPhaseEnd

+ 

+     rlPhaseStartCleanup

+         rlRun "popd"

+         rlRun "rm -r $TmpDir" 0 "Removing tmp directory"

+     rlPhaseEnd

+ rlJournalPrintText

+ rlJournalEnd

@@ -0,0 +1,64 @@

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Makefile of /tools/ltrace/Sanity/random-apps

+ #   Description: Runs random app which caused strace problems in the past

+ #   Author: Michal Nowak <mnowak@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2011 Red Hat, Inc. All rights reserved.

+ #

+ #   This copyrighted material is made available to anyone wishing

+ #   to use, modify, copy, or redistribute it subject to the terms

+ #   and conditions of the GNU General Public License version 2.

+ #

+ #   This program is distributed in the hope that it will be

+ #   useful, but WITHOUT ANY WARRANTY; without even the implied

+ #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

+ #   PURPOSE. See the GNU General Public License for more details.

+ #

+ #   You should have received a copy of the GNU General Public

+ #   License along with this program; if not, write to the Free

+ #   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

+ #   Boston, MA 02110-1301, USA.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ export TEST=/tools/ltrace/Sanity/random-apps

+ export TESTVERSION=1.0

+ 

+ BUILT_FILES=

+ 

+ FILES=$(METADATA) runtest.sh Makefile PURPOSE *.c

+ 

+ .PHONY: all install download clean

+ 

+ run: $(FILES) build

+ 	./runtest.sh

+ 

+ build: $(BUILT_FILES)

+ 	chmod a+x runtest.sh

+ 

+ clean:

+ 	rm -f *~ $(BUILT_FILES)

+ 

+ 

+ include /usr/share/rhts/lib/rhts-make.include

+ 

+ $(METADATA): Makefile

+ 	@echo "Owner:           Michal Nowak <mnowak@redhat.com>" > $(METADATA)

+ 	@echo "Name:            $(TEST)" >> $(METADATA)

+ 	@echo "TestVersion:     $(TESTVERSION)" >> $(METADATA)

+ 	@echo "Path:            $(TEST_DIR)" >> $(METADATA)

+ 	@echo "Description:     Runs random app which caused strace problems in the past" >> $(METADATA)

+ 	@echo "Type:            Sanity" >> $(METADATA)

+ 	@echo "TestTime:        1h" >> $(METADATA)

+ 	@echo "RunFor:          ltrace" >> $(METADATA)

+ 	@echo "Requires:        ltrace" >> $(METADATA)

+ 	@echo "Requires:        gcc glibc-devel" >> $(METADATA)

+ 	@echo "Priority:        Normal" >> $(METADATA)

+ 	@echo "License:         GPLv2" >> $(METADATA)

+ 	@echo "Confidential:    yes" >> $(METADATA)

+ 	@echo "Destructive:     no" >> $(METADATA)

+ 

+ 	rhts-lint $(METADATA)

@@ -0,0 +1,3 @@

+ PURPOSE of /tools/ltrace/Sanity/random-apps

+ Description: Runs random app which caused strace problems in the past

+ Author: Michal Nowak <mnowak@redhat.com>

@@ -0,0 +1,6 @@

+ #include <stdlib.h>

+ 

+ int main() {

+   abort();

+ }

+ 

@@ -0,0 +1,14 @@

+ summary: Runs random app which caused strace problems in the past

+ description: ''

+ contact: Michal Nowak <mnowak@redhat.com>

+ component:

+ - ltrace

+ test: ./runtest.sh

+ framework: beakerlib

+ recommend:

+ - ltrace

+ - gcc

+ - glibc-devel

+ duration: 1h

+ extra-summary: /tools/ltrace/Sanity/random-apps

+ extra-task: /tools/ltrace/Sanity/random-apps

@@ -0,0 +1,35 @@

+ #include <stdio.h>

+ #include <pthread.h>

+ #include <unistd.h>

+ #include <sys/types.h>

+ #include <signal.h>

+ #include <stdlib.h>

+ 

+ static int thd_no;

+ 

+ static void *sub_thd(void *c)

+ {

+ 	fprintf(stderr, "sub-thread %d created\n", ++thd_no);

+ 	for (;;)

+ 		getuid();

+ 	return NULL;

+ }

+ 

+ int main(int argc, char *argv[])

+ {

+ 	int i;

+ 	pthread_t *thd;

+ 	int num_threads = 1;

+ 

+ 	if (argv[1])

+ 		num_threads = atoi(argv[1]);

+ 

+ 	thd = malloc(num_threads * sizeof(thd[0]));

+ 	fprintf(stderr, "test start, num_threads:%d...\n", num_threads);

+ 	for (i = 0; i < num_threads; i++) {

+ 		pthread_create(&thd[i], NULL, sub_thd, NULL);

+ 		fprintf(stderr, "after pthread_create\n");

+ 	}

+ 	/* Exit. This kills all threads */

+ 	return 0;

+ }

@@ -0,0 +1,43 @@

+ #include <stdio.h>

+ #include <pthread.h>

+ #include <unistd.h>

+ #include <sys/types.h>

+ #include <signal.h>

+ 

+ #define NTHD 60

+ 

+ int thd_no;

+ 

+ 

+ long sub_func(void)

+ {

+ 	uid_t uid;

+ 

+ 	printf("sub-thread created: %d\n", ++thd_no);

+ 

+ 	for (;;) {

+ 		uid = getuid();

+ 		sleep(1);

+ 	}

+ 

+ 	return (long)uid;

+ }

+ 

+ void *sub_thd(void *c)

+ {

+ 	sub_func();

+ }

+ 

+ main(int argc, char *argv[])

+ {

+ 	int i;

+ 	pthread_t thd[NTHD];

+ 

+ 	printf("test start...\n");

+ 

+ 	for (i = 0; i < NTHD; i++) {

+ 		pthread_create(&thd[i], NULL, sub_thd, NULL);

+ 	}

+ //	pause();

+ }

+ 

@@ -0,0 +1,14 @@

+ #include <pthread.h>

+ 

+ void *start (void *arg) {

+   return arg;

+ }

+ 

+ pthread_t thread1;

+ 

+ int main () {

+   pthread_create (&thread1, NULL, start, NULL);

+   sleep (1);

+   return 0;

+ }

+ 

@@ -0,0 +1,15 @@

+ #include <stddef.h>

+ #include <signal.h>

+ 

+ static void h(int sig) {}

+ 

+ int main()

+ {

+         struct sigaction sa;

+         sigemptyset(&sa.sa_mask);

+         sa.sa_handler = h;

+         sa.sa_flags = SA_RESETHAND | SA_NODEFER;

+         sigaction (SIGUSR1, &sa, NULL);

+         return 0;

+ }

+ 

@@ -0,0 +1,14 @@

+ #include <pthread.h>

+ 

+ void *start (void *arg) {

+   return arg;

+ }

+ 

+ pthread_t thread1;

+ 

+ int main () {

+   pthread_create (&thread1, NULL, start, NULL);

+   sleep (1);

+   return 0;

+ }

+ 

@@ -0,0 +1,101 @@

+ #!/bin/bash

+ # vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   runtest.sh of /tools/ltrace/Sanity/random-apps

+ #   Description: Runs random app which caused strace problems in the past

+ #   Author: Michal Nowak <mnowak@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2011 Red Hat, Inc. All rights reserved.

+ #

+ #   This copyrighted material is made available to anyone wishing

+ #   to use, modify, copy, or redistribute it subject to the terms

+ #   and conditions of the GNU General Public License version 2.

+ #

+ #   This program is distributed in the hope that it will be

+ #   useful, but WITHOUT ANY WARRANTY; without even the implied

+ #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

+ #   PURPOSE. See the GNU General Public License for more details.

+ #

+ #   You should have received a copy of the GNU General Public

+ #   License along with this program; if not, write to the Free

+ #   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,

+ #   Boston, MA 02110-1301, USA.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ # Include Beaker environment

+ . /usr/share/beakerlib/beakerlib.sh || exit 1

+ 

+ CMD='ltrace'

+ BIN=$(which --skip-alias $CMD)

+ PACKAGE="$(rpm -qf --qf='%{name}\n' $BIN)"

+ #export MALLOC_PERTURB_=$(($RANDOM % 255 + 1))

+ 

+ rlJournalStart

+ 	rlPhaseStartSetup

+ 		rlAssertRpm $PACKAGE

+ 		rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory"

+ 		cp *.c $TmpDir

+ 		rlRun "pushd $TmpDir"

+ 	rlPhaseEnd

+ 

+ 	touch FAILED PASSED

+ 	PASSED_CNT=0

+ 	FAILED_CNT=0

+ 	ALL_CNT=0

+ 	for test in *.c; do

+ 		RESULT="PASS"

+ 		rlPhaseStartTest "Test ${test}"

+ 			rlRun "gcc $test -o ${test}.bin -lpthread" 0 "Compile $test"

+ 			rlAssertExists "${test}.bin"

+ 			rlRun "ltrace -o ${test}.LOG -f ./${test}.bin" 0 "Run $test under ltrace"

+ 			[ $? -ne 0 ] && RESULT=FAIL

+ 

+ 			echo

+ 			cat ${test}.LOG

+ 			echo

+ 

+ 			rlAssertNotGrep "\-\-\- SIGKILL" ${test}.LOG

+ 			[ $? -ne 0 ] && RESULT=FAIL

+ 			rlAssertNotGrep "\-\-\- SIGSEGV" ${test}.LOG

+ 			[ $? -ne 0 ] && RESULT=FAIL

+ 			rlAssertNotGrep "\-\-\- SIGILL" ${test}.LOG

+ 			[ $? -ne 0 ] && RESULT=FAIL

+ 			rlAssertNotGrep "\-\-\- SIGTRAP" ${test}.LOG

+ 			[ $? -ne 0 ] && RESULT=FAIL

+ 			rlAssertNotGrep "\-\-\- SIGINT" ${test}.LOG

+ 			[ $? -ne 0 ] && RESULT=FAIL

+ 			if [[ "$RESULT" == "PASS" ]]; then

+ 				let "PASSED_CNT = $PASSED_CNT + 1"

+ 				echo "$test $opt" >> PASSED

+ 			else

+ 				let "FAILED_CNT = $FAILED_CNT + 1"

+ 				echo "$test $opt" >> FAILED

+ 			fi

+ 			let "ALL_CNT = $ALL_CNT + 1"

+ 		rlPhaseEnd

+ 	done

+ 

+ 	rlPhaseStartTest

+ 		rlLog "PASSED : $PASSED_CNT of $ALL_CNT"

+ 		cat PASSED

+ 		rlLog "FAILED : $FAILED_CNT of $ALL_CNT"

+ 		cat FAILED

+ 		if [ $FAILED_CNT -eq 0 ]; then

+ 			rlPass "All testcases passed."

+ 		else

+ 			rlFail "There are some errors."

+ 		fi

+ 	rlPhaseEnd

+ 

+ 	rlPhaseStartCleanup

+ 		rlRun "tar c *.LOG *.bin PASSED FAILED | gzip > logs.tar.gz"

+ 		rlFileSubmit "logs.tar.gz"

+ 		rlRun "popd"

+ 		rlRun "rm -r $TmpDir" 0 "Removing tmp directory"

+ 	rlPhaseEnd

+ rlJournalPrintText

+ rlJournalEnd

@@ -0,0 +1,8 @@

+ #include <stdio.h>

+ #include <stdlib.h>

+ 

+ int main() {

+         printf("Linux\n");

+         exit(0);

+ }

+ 

@@ -0,0 +1,6 @@

+ #include <unistd.h>

+ 

+ int main()

+ {

+    sleep (15);

+ }

@@ -0,0 +1,211 @@

+ #include <sys/stat.h>

+ #include <fcntl.h>

+ #include <linux/sem.h>

+ #include <sys/mman.h>

+ #include <signal.h>

+ #include <stdio.h>

+ #include <stdlib.h>

+ #include <unistd.h>

+ //#include "trigger_error.h"

+ #define THREAD_NUM 100

+ #define MALLOC_LEN 1024*1024*10

+ #define DEFAULT_NUM 0

+ #define MAXSEM 5

+ 

+ int fd[10000];

+ int fullid;

+ int emptyid;

+ int mutxid;

+ 

+ void *thread_handle_a(void *temp);

+ 

+ int main(int argc, char *argv[])

+ {

+ 	pthread_t tid_a;

+ 	int i;

+ 	int ai[THREAD_NUM];

+ 	int ret_a = -1;

+ 	int file_num;

+ 	char filename[10];

+ 	char str[20];

+ 	struct sembuf P, V;;

+ 	union semun arg;

+ 	pid_t pid;

+ 

+ 	int *array;

+ 	int *sum;

+ 	int *set;

+ 	int *get;

+ 

+ 	if (DEFAULT_NUM == 0) {

+ 		file_num = 10;

+ 	}

+ 

+ #ifdef STS_SLEEP

+ 	sleep(10);

+ #endif

+ 

+ 	for (i = 0; i < file_num; i++) {

+ 		sprintf(filename, "%d", i);

+ 		printf("open fd%d\n", i);

+ 		fd[i] = open(filename, O_RDONLY);

+ 		if (fd[i] < 0)

+ 			continue;

+ 

+ 		if (read(fd[i], str, sizeof(str)) < 0) {

+ 			close(fd[i]);

+ 			fd[i] = -1;

+ 			continue;

+ 		}

+ 		printf("%s", str);

+ 	}

+ 

+ 	for (i = 0; i < file_num; i++) {

+ 		if (fd[i] >= 0) {

+ 			close(fd[i]);

+ 		}

+ 	}

+ 

+ 	for (i = 0; i < file_num; i++) {

+ 		fd[0] = open("/dev/null", O_RDONLY);

+ 		if (fd[0] < 0) {

+ 			perror("open /dev/null");

+ 			continue;

+ 		}

+ 		close(fd[0]);

+ 	}

+ 

+ 	for (i = 0; i < file_num; i++) {

+ 		fd[0] = open("/proc/meminfo", O_RDONLY);

+ 		if (fd[0] < 0) {

+ 			perror("open /proc/meminfo");

+ 			continue;

+ 		}

+ 		if (read(fd[0], str, sizeof(str)) < 0) {

+ 			close(fd[0]);

+ 			continue;

+ 		}

+ 		printf("%s\n", str);

+ 		close(fd[0]);

+ 	}

+ 	for (i = 0; i < file_num; i++) {

+ 		fd[0] = open("/proc/self/maps", O_RDONLY);

+ 		if (fd[0] < 0) {

+ 			perror("open /proc/meminfo");

+ 			continue;

+ 		}

+ 		if (read(fd[0], str, sizeof(str)) < 0) {

+ 			close(fd[0]);

+ 			continue;

+ 		}

+ 		printf("%s\n", str);

+ 		close(fd[0]);

+ 	}

+ 

+ 	array =

+ 	    (int *)mmap(NULL, sizeof(int) * 5, PROT_READ | PROT_WRITE,

+ 			MAP_SHARED | MAP_ANONYMOUS, -1, 0);

+ 	sum =

+ 	    (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE,

+ 			MAP_SHARED | MAP_ANONYMOUS, -1, 0);

+ 	get =

+ 	    (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE,

+ 			MAP_SHARED | MAP_ANONYMOUS, -1, 0);

+ 	set =

+ 	    (int *)mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE,

+ 			MAP_SHARED | MAP_ANONYMOUS, -1, 0);

+ 	*sum = 0;

+ 	*get = 0;

+ 	*set = 0;

+ 

+ 	fullid = semget(IPC_PRIVATE, 1, IPC_CREAT | 00666);

+ 	emptyid = semget(IPC_PRIVATE, 1, IPC_CREAT | 00666);

+ 	mutxid = semget(IPC_PRIVATE, 1, IPC_CREAT | 00666);

+ 

+ 	arg.val = 0;

+ 	if (semctl(fullid, 0, SETVAL, arg) == -1)

+ 		perror("semctl setval error");

+ 

+ 	arg.val = MAXSEM;

+ 	if (semctl(emptyid, 0, SETVAL, arg) == -1)

+ 		perror("semctl setval error");

+ 

+ 	arg.val = 1;

+ 	if (semctl(mutxid, 0, SETVAL, arg) == -1)

+ 		perror("setctl setval error");

+ 

+ 	V.sem_num = 0;

+ 	V.sem_op = 1;

+ 	V.sem_flg = SEM_UNDO;

+ 	P.sem_num = 0;

+ 	P.sem_op = -1;

+ 	P.sem_flg = SEM_UNDO;

+ 

+ 	i = 0;

+ 	while (i < 5) {

+ 

+ 		semop(emptyid, &P, 1);

+ 		semop(mutxid, &P, 1);

+ 

+ 		array[*(set) % MAXSEM] = i + 1;

+ 		printf("Producer %d\n", array[(*set) % MAXSEM]);

+ 		(*set)++;

+ 		fflush(NULL);

+ 		semop(mutxid, &V, 1);

+ 		semop(fullid, &V, 1);

+ 		i++;

+ 	}

+ 	semctl(fullid, 0, IPC_RMID);

+ 	semctl(emptyid, 0, IPC_RMID);

+ 	semctl(mutxid, 0, IPC_RMID);

+ 

+ 	if ((pid = fork()) == 0) {

+ 		for (i = 0; i < THREAD_NUM; i++) {

+ 			ai[i] = i;

+ 			ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]);

+ 			printf("thread a : \n");

+ 

+ 			if (ret_a == 0) {

+ 				pthread_detach(tid_a);

+ 			}

+ 		}

+ 	} else if (pid > 0) {

+ 		for (i = 0; i < THREAD_NUM; i++) {

+ 			ai[i] = i;

+ 			ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]);

+ 			printf("thread a : \n");

+ 

+ 			if (ret_a == 0) {

+ 				pthread_detach(tid_a);

+ 			}

+ 		}

+ 	} else {

+ 		printf("fork error\n");

+ 	}

+ 

+ 	fflush(NULL);

+ 	write(1, "BEFORE_ERROR\n", 13);

+ 	//trigger_error();

+ 	raise(SIGFPE);

+ 	write(1, "EXIT_FLAG\n", 10);

+ 	return 10;

+ }

+ 

+ void *thread_handle_a(void *t)

+ {

+ 	long page_size = MALLOC_LEN;

+ 	int j = *(int *)t;

+ 	char *addr;

+ 	addr = (char *)malloc(page_size);

+ 	if (addr != NULL) {

+ 		sprintf(addr, "hello");

+ 		printf("(a) malloc %d success: %s\n", j, addr);

+ 	} else {

+ 		printf("(a)malloc %d failed\n", j);

+ 	}

+ 

+ 	printf("thread (a) will exit\n");

+ 	fflush(NULL);

+ 	return NULL;

+ }

+ 

@@ -0,0 +1,52 @@

+ #include <stdio.h>

+ #include <unistd.h>

+ #include <sys/wait.h>

+ #include <stdlib.h>

+ #include <string.h>

+ 

+ int main(int argc, char *argv[])

+ {

+ 	int pfd[2];

+ 	pid_t pid = -1;

+ 	int rc = 0;

+ 	char buf[BUFSIZ];

+         sigset_t sig_mask;

+ 

+ 	/*

+ 	 * Mask of SIGTRAP

+ 	 * Initialize of the value of sig_mask

+ 	 */

+ 	sigemptyset(&sig_mask);

+ 

+ 	/* Set of SIGTRAP in sig_mask */

+ 	sigaddset(&sig_mask, SIGTRAP);

+ 

+  	/* Set of SIGTRAP */

+ 	sigprocmask(SIG_SETMASK, &sig_mask, NULL);

+ 

+ 	rc = pipe(pfd);

+ 	if(rc == -1){

+ 		perror("pipe Error\n");

+ 		exit (1);

+ 	}

+ 	pid = fork();

+ 	if (pid == -1){

+ 		perror("Fork Error\n");

+ 		exit (1);

+ 	} else if (pid == 0) {

+ 		close(pfd[0]);

+ 		close(1);

+ 		dup(pfd[1]);

+ 		close(pfd[1]);

+ 		execl("./test2.sh", (char *)0);

+ 		exit(0);

+ 	} else {

+ 		close(pfd[1]);

+ 		while((read(pfd[0], buf, sizeof(buf))) > 0) {

+ 			printf("%s", buf);

+ 		}

+ 		close(pfd[0]);

+ 		wait(NULL);

+ 		exit(0);

+ 	}

+ }

@@ -0,0 +1,78 @@

+ #include <stdio.h>

+ #include <stdlib.h>

+ #include <unistd.h>

+ #include <sys/types.h>

+ #include <sys/stat.h>

+ #include <fcntl.h>

+ #include <pthread.h>

+ #include <sys/wait.h>

+ 

+ #define DEFAULT_NUM 0

+ #define THREAD_NUM 3

+ #define MALLOC_LEN 1024*1024*10

+ 

+ void *thread_handle_a(void *t)

+ {

+ 	long page_size = MALLOC_LEN;

+ 	int j = *(int *)t;

+ 	char *ptr;

+ 	char *addr;

+ 

+ 	struct stat buf;

+ 	addr = (char *)malloc(page_size);

+ 	if (addr != NULL) {

+ 		sprintf(addr, "hello");

+ 		printf("(a) malloc %d success: %s\n", j, addr);

+ 	} else {

+ 		printf("(a)malloc %d failed\n", j);

+ 	}

+ 

+ 

+ 	printf("thread (a) will exit\n");

+ 	fflush(NULL);

+ 	if(addr != NULL)

+ 		free(addr);

+ 	return NULL;

+ }

+ 

+ int main()

+ {

+ 	int i = 0;

+ 	pid_t pid;

+ 	pthread_t tid_a;

+ 	int ai[THREAD_NUM];

+ 	int ret_a = -1;

+ 

+ #ifdef STS_SLEEP

+ 	sleep(10);

+ #endif

+ 

+ 	if ((pid = fork()) == 0) {

+ 		for (i = 0; i < THREAD_NUM; i++) {

+ 			ai[i] = i;

+ 			ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]);

+ 			printf("thread a : \n");

+ 

+ 			if (ret_a == 0) {

+ 				pthread_detach(tid_a);

+ 			}

+ 		}

+ 	} else if (pid > 0) {

+ 		for (i = 0; i < THREAD_NUM; i++) {

+ 			ai[i] = i;

+ 			ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]);

+ 			printf("thread a : \n");

+ 

+ 			if (ret_a == 0) {

+ 				pthread_detach(tid_a);

+ 			}

+ 		}

+ 

+ 		waitpid(pid, NULL, 0);

+ 		fflush(NULL);

+ 		write(1, "EXIT_FLAG\n", 10);

+ 	} else {

+ 		printf("fork error\n");

+ 	}

+ 	return 0;

+ }

@@ -0,0 +1,70 @@

+ #include <stdio.h>

+ #include <string.h>

+ #include <errno.h>

+ #include <stdlib.h>

+ #include <unistd.h>

+ #include <sys/time.h>

+ #include <sys/types.h>

+ 

+ #define MAXBUF 1024

+ #define THREAD_NUM 100

+ #define MALLOC_LEN 1024*1024*10

+ 

+ void *thread_handle_a(void *t)

+ {

+ 	long page_size = MALLOC_LEN;

+ 	int j = *(int *)t;

+ 	char *addr;

+ 	addr = (char *)malloc(page_size);

+ 	if (addr != NULL) {

+ 		sprintf(addr, "hello");

+ 		printf("(a) malloc %d success: %s\n", j, addr);

+ 	} else {

+ 		printf("(a)malloc %d failed\n", j);

+ 	}

+ 

+ 	printf("thread (a) will exit\n");

+ 	fflush(NULL);

+ 	return NULL;

+ }

+ 

+ int main(int argc, char **argv)

+ {

+ 	fd_set wfds;

+ 	struct timeval tv;

+ 	int retval, maxfd = -1;

+ 	pthread_t tid_a;

+ 	int i;

+ 	int ai[THREAD_NUM];

+ 	int ret_a = -1;

+ 

+ 	sleep(5);

+ 

+ 	for (i = 0; i < THREAD_NUM; i++) {

+ 		ai[i] = i;

+ 		ret_a = pthread_create(&tid_a, NULL, thread_handle_a, &ai[i]);

+ 		printf("thread a : \n");

+ 

+ 		if (ret_a == 0) {

+ 			pthread_detach(tid_a);

+ 		}

+ 	}

+ 

+ 	FD_ZERO(&wfds);

+ 	FD_SET(STDOUT_FILENO, &wfds);

+ 	maxfd = STDOUT_FILENO;

+ 	tv.tv_sec = 1;

+ 	tv.tv_usec = 0;

+ 	

+ 	retval = select(maxfd+1, NULL, &wfds, NULL, &tv);

+ 	if (retval == -1) {

+ 		fprintf(stderr, "select failed\n");

+ 	} else if (retval == 0){

+ 		printf("Time out\n");

+ 	} else {

+ 		printf("stdout can be write\n");

+ 	}

+ 	

+ 	printf("EXIT_FLAG\n");

+ 	return 0;

+ }

@@ -0,0 +1,34 @@

+ #include <stdio.h>

+ #include <unistd.h>

+ #include <stdlib.h>

+ #include <pthread.h>

+ #include <string.h>

+ #include <signal.h>

+ 

+ #define THREAD_NUM 32

+ 

+ void *thread_function (void *);

+ 

+ int main (int argc, char *argv[])

+ {

+         int i =0, x = 0;

+         int res = 0;

+         pthread_t a_thread[THREAD_NUM];

+         void *thread_result;

+ 

+         for (i = 0; i < THREAD_NUM; i++) {

+                 res = pthread_create (&a_thread[i], NULL, thread_function, (void *)0);

+                 if (res != 0) {

+                         printf("Thread create failed\n");

+                         return (10);

+                 }

+         }

+ 	raise(SIGABRT);

+         return (0);

+ }

+ 

+ void *thread_function (void *arg)

+ {

+ 	sleep(1);

+ 	printf("Thread TEST\n");

+ }

@@ -0,0 +1,15 @@

+ #define _GNU_SOURCE

+ #include <unistd.h>

+ #include <stdio.h>

+ 

+ int main (void)

+ {

+ 	pid_t child = vfork ();

+ 

+ 	/* PRINTF/SLEEP violate the VFORK operations restriction.  */

+ 	printf ("%d pid=%d\n", (int) child, (int) getpid ());

+ 	sleep (1);

+ 	if (!child)

+ 	  execlp ("/bin/true", "/bin/true", NULL);

+ 	return 0;

+ }

@@ -0,0 +1,71 @@

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Makefile of /tools/ltrace/Sanity/testsuite

+ #   Description: upstream tests for ltrace

+ #   Author: Martin Cermak <mcermak@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2015 Red Hat, Inc.

+ #

+ #   This program is free software: you can redistribute it and/or

+ #   modify it under the terms of the GNU General Public License as

+ #   published by the Free Software Foundation, either version 2 of

+ #   the License, or (at your option) any later version.

+ #

+ #   This program is distributed in the hope that it will be

+ #   useful, but WITHOUT ANY WARRANTY; without even the implied

+ #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

+ #   PURPOSE.  See the GNU General Public License for more details.

+ #

+ #   You should have received a copy of the GNU General Public License

+ #   along with this program. If not, see http://www.gnu.org/licenses/.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ export TEST=/tools/ltrace/Sanity/testsuite

+ export TESTVERSION=1.0

+ 

+ BUILT_FILES=

+ 

+ FILES=$(METADATA) runtest.sh Makefile PURPOSE

+ 

+ .PHONY: all install download clean

+ 

+ run: $(FILES) build

+ 	./runtest.sh

+ 

+ build: $(BUILT_FILES)

+ 	test -x runtest.sh || chmod a+x runtest.sh

+ 

+ clean:

+ 	rm -f *~ $(BUILT_FILES)

+ 

+ 

+ include /usr/share/rhts/lib/rhts-make.include

+ 

+ $(METADATA): Makefile

+ 	@echo "Owner:           Martin Cermak <mcermak@redhat.com>" > $(METADATA)

+ 	@echo "Name:            $(TEST)" >> $(METADATA)

+ 	@echo "TestVersion:     $(TESTVERSION)" >> $(METADATA)

+ 	@echo "Path:            $(TEST_DIR)" >> $(METADATA)

+ 	@echo "Description:     upstream tests for ltrace" >> $(METADATA)

+ 	@echo "Type:            Regression" >> $(METADATA)

+ 	@echo "TestTime:        5h" >> $(METADATA)

+ 	@echo "RunFor:          ltrace" >> $(METADATA)

+ 	@echo "Requires:        ltrace" >> $(METADATA)

+ 	@echo "Requires:	gcc" >> $(METADATA)

+ 	@echo "Requires:	gcc-c++" >> $(METADATA)

+ 	@echo "Requires:	libstdc++" >> $(METADATA)

+ 	@echo "Requires:	libstdc++-devel" >> $(METADATA)

+ 	@echo "Requires:	rpm-build yum-utils" >> $(METADATA)

+ 	@echo "Requires:        elfutils-devel" >> $(METADATA)

+ 	@echo "Requires:        dejagnu" >> $(METADATA)

+ 	@echo "Requires:        libselinux-devel" >> $(METADATA)

+ 	@echo "Requires:        libtool" >> $(METADATA)

+ 	@echo "Priority:        Normal" >> $(METADATA)

+ 	@echo "License:         GPLv2+" >> $(METADATA)

+ 	@echo "Confidential:    no" >> $(METADATA)

+ 	@echo "Destructive:     no" >> $(METADATA)

+ 

+ 	rhts-lint $(METADATA)

@@ -0,0 +1,3 @@

+ PURPOSE of /tools/ltrace/Sanity/testsuite

+ Description: upstream tests for ltrace

+ Author: Martin Cermak <mcermak@redhat.com>

@@ -0,0 +1,23 @@

+ summary: upstream tests for ltrace

+ description: ''

+ contact: Martin Cermak <mcermak@redhat.com>

+ component:

+ - ltrace

+ test: ./runtest.sh

+ framework: beakerlib

+ recommend:

+ - ltrace

+ - gcc

+ - gcc-c++

+ - libstdc++

+ - libstdc++-devel

+ - rpm-build

+ - yum-utils

+ - elfutils-devel

+ - dejagnu

+ - libselinux-devel

+ - libtool

+ - koji

+ duration: 5h

+ extra-summary: /tools/ltrace/Sanity/testsuite

+ extra-task: /tools/ltrace/Sanity/testsuite

@@ -0,0 +1,79 @@

+ #!/bin/bash

+ # vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   runtest.sh of /tools/ltrace/Sanity/testsuite

+ #   Description: upstream tests for ltrace

+ #   Author: Martin Cermak <mcermak@redhat.com>

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ #

+ #   Copyright (c) 2015 Red Hat, Inc.

+ #

+ #   This program is free software: you can redistribute it and/or

+ #   modify it under the terms of the GNU General Public License as

+ #   published by the Free Software Foundation, either version 2 of

+ #   the License, or (at your option) any later version.

+ #

+ #   This program is distributed in the hope that it will be

+ #   useful, but WITHOUT ANY WARRANTY; without even the implied

+ #   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR

+ #   PURPOSE.  See the GNU General Public License for more details.

+ #

+ #   You should have received a copy of the GNU General Public License

+ #   along with this program. If not, see http://www.gnu.org/licenses/.

+ #

+ # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ 

+ # Include Beaker environment

+ . /usr/share/beakerlib/beakerlib.sh || exit 1

+ 

+ CMD='ltrace'

+ BIN=$(which --skip-alias $CMD)

+ PACKAGE="${PACKAGE:-$(rpm -qf $BIN)}"

+ export PACKAGE

+ 

+ GCC=${GCC:-gcc}

+ export GCC

+ 

+ rlJournalStart

+     rlPhaseStartSetup

+         rlAssertRpm $PACKAGE

+         rlRun -l "rpm -qf $(which $GCC)" 0 "Checking gcc rpm version"

+         rlRun "TMP=`mktemp -d`"

+         rlRun "pushd $TMP"

+ 

+         rlRun "koji download-build --arch=src $PACKAGE"

+         rlRun "dnf builddep -y *src.rpm"

+         rlRun "rpm --define='_topdir $TMP' -Uvh *src.rpm"

+         rlRun "${RPMBUILD_GCC:+CC=$RPMBUILD_GCC} rpmbuild --define='_topdir $TMP' -bc SPECS/${CMD}.spec"

+     rlPhaseEnd

+ 

+     rlPhaseStartTest

+         rlRun "pushd BUILD/${CMD}-*"

+ 

+         # known issues to be ignored

+         ignore_list=''

+         rlRun "ignore_list+=' system_calls.exp'" 0 "Failure reported bz#1963110"

+ 

+         # define --ignore parameter for 'make check' if there is any testcase to be ignored

+         [ -n "$ignore_list" ] && rlRun "ignore_param=\"--ignore '$ignore_list'\"" 0 "Ignored testcases that will not be run: $ignore_list"

+ 

+         # test

+         set -o pipefail

+         rlRun "make check RUNTESTFLAGS=\"--tool_exec=$BIN CC_FOR_TARGET=$GCC $ignore_param\" |& tee $TMP/check.log"

+         rlRun "popd"

+ 

+         # no unexpected results should appear

+         rlRun -l "grep '^FAIL:' check.log" 1

+         rlRun -l "grep '^# of unexpected' check.log" 1

+ 

+         rlFileSubmit "$TMP/check.log" "$PACKAGE-check.log"

+     rlPhaseEnd

+ 

+     rlPhaseStartCleanup

+         rlRun "popd"

+         rlRun "rm -r $TMP"

+     rlPhaseEnd

+ rlJournalPrintText

+ rlJournalEnd

no initial comment

rebased onto c8ea901

2 years ago

Pull-Request has been merged by codonell

2 years ago
Metadata