changeset 999:69f95c134121

added conditional result capabilities
author thomask
date Wed, 17 May 2006 04:57:35 +0000
parents 94714c219f3b
children ba40405a2a79
files dstress.c
diffstat 1 files changed, 41 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/dstress.c	Mon May 15 05:42:01 2006 +0000
+++ b/dstress.c	Wed May 17 04:57:35 2006 +0000
@@ -688,6 +688,23 @@
 	return 0;
 }
 
+int conditionalResult(const char* buffer){
+	if(strstr(buffer, "DSTRESS{XFAIL}")){
+		return RES_XFAIL;
+	}else if(strstr(buffer, "DSTRESS{XPASS}")){
+		return RES_XPASS;
+	}else if(strstr(buffer, "DSTRESS{FAIL}")){
+		return RES_FAIL;
+	}else if(strstr(buffer, "DSTRESS{PASS}")){
+		return RES_PASS;
+	}else if(strstr(buffer, "DSTRESS{ERROR}")){
+		return RES_ERROR;
+	}else{
+		return 0;
+	}
+	
+}
+
 /* system call with time-out */
 int crashRun(const char* cmd, char** logFile){
 
@@ -858,7 +875,11 @@
 	free(logFile);
 	good_error = checkErrorMessage(error_file, error_line, buffer);
 
-	if(hadExecCrash(buffer)){
+	testResult = conditionalResult(buffer);
+
+	if(testResult){
+		/* conditional result */
+	}else if(hadExecCrash(buffer)){
 		testResult = RES_ERROR;
 	}else if(modus & MODE_COMPILE){
 		if(res == EXIT_SUCCESS){
@@ -966,12 +987,15 @@
 		good_error = 1;
 	}
 
+	testResult = conditionalResult(buffer);
 	if(hadExecCrash(buffer)){
 		free(buffer);
 		return RES_ERROR;
 	}else{
 		free(buffer);
-		if((res == EXIT_FAILURE) && good_error){
+		if(testResult){
+			return testResult;
+		}else if((res == EXIT_FAILURE) && good_error){
 			return RES_FAIL;
 		}else if(res!=EXIT_SUCCESS){
 			return RES_ERROR | (good_error ? 0 : RES_BAD_MSG);
@@ -1002,6 +1026,11 @@
 	}
 	printf("%s\n", buffer);
 	res=crashRun(buffer, &logFile);
+	testResult = conditionalResult(buffer);
+	if(testResult){
+		free(buffer);
+		return testResult;
+	}
 	free(buffer);
 
 	/* diagnostic 2/3 */
@@ -1022,6 +1051,11 @@
 			||(res==EXIT_SUCCESS && (modus & MODE_RUN)))
 			&& gdb_script != NULL)
 	{
+		testResult = conditionalResult(buffer);
+		if(testResult){
+			return testResult;
+		}
+
 		free(buffer);
 		good_gdb = 0;
 		/* test 3/3 - gdb */
@@ -1048,6 +1082,11 @@
 	good_gdb = 1;
 #endif /* REG_EXTENDED else */
 
+	testResult = conditionalResult(buffer);
+	if(testResult){
+		return testResult;
+	}
+
 	if(modus & MODE_RUN){
 		if(hadExecCrash(buffer)){
 			testResult = RES_ERROR;