r3148: make --failures work for the BASE-DENY1 and BASE-DENY2 tests
[bbaumbach/samba-autobuild/.git] / source4 / torture / basic / denytest.c
index 66a1b37eecb02335716c025999e889f379b96a2f..8c0339dfedc44e8d096208dab7a8c66e11ca6bc6 100644 (file)
@@ -21,6 +21,9 @@
 #include "includes.h"
 
 extern BOOL torture_showall;
+extern int torture_failures;
+
+#define CHECK_MAX_FAILURES(label) do { if (++failures >= torture_failures) goto label; } while (0)
 
 enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5};
 
@@ -79,7 +82,7 @@ static const char *resultstr(enum deny_result res)
        return "*";
 }
 
-static struct {
+static const struct {
        int isexe;
        int mode1, deny1;
        int mode2, deny2;
@@ -736,7 +739,7 @@ static struct {
 };
 
 
-static struct {
+static const struct {
        int isexe;
        int mode1, deny1;
        int mode2, deny2;
@@ -1411,6 +1414,7 @@ BOOL torture_denytest1(int dummy)
        BOOL correct = True;
        struct timeval tv, tv_start;
        const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
+       int failures=0;
 
        if (!torture_open_connection(&cli1)) {
                return False;
@@ -1459,10 +1463,6 @@ BOOL torture_denytest1(int dummy)
                        }
                }
 
-               if (res != denytable1[i].result) {
-                       correct = False;
-               }
-
                if (torture_showall || res != denytable1[i].result) {
                        int64_t tdif;
                        GetTimeOfDay(&tv);
@@ -1479,10 +1479,16 @@ BOOL torture_denytest1(int dummy)
                               resultstr(denytable1[i].result));
                }
 
+               if (res != denytable1[i].result) {
+                       correct = False;
+                       CHECK_MAX_FAILURES(failed);
+               }
+
                smbcli_close(cli1->tree, fnum1);
                smbcli_close(cli1->tree, fnum2);
        }
 
+failed:
        for (i=0;i<2;i++) {
                smbcli_unlink(cli1->tree, fnames[i]);
        }
@@ -1491,7 +1497,7 @@ BOOL torture_denytest1(int dummy)
                correct = False;
        }
        
-       printf("finshed denytest1\n");
+       printf("finshed denytest1 (%d failures)\n", failures);
        return correct;
 }
 
@@ -1507,6 +1513,7 @@ BOOL torture_denytest2(int dummy)
        BOOL correct = True;
        const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
        struct timeval tv, tv_start;
+       int failures=0;
 
        if (!torture_open_connection(&cli1) || !torture_open_connection(&cli2)) {
                return False;
@@ -1553,10 +1560,6 @@ BOOL torture_denytest2(int dummy)
                        }
                }
 
-               if (res != denytable2[i].result) {
-                       correct = False;
-               }
-
                if (torture_showall || res != denytable2[i].result) {
                        int64_t tdif;
                        GetTimeOfDay(&tv);
@@ -1573,10 +1576,16 @@ BOOL torture_denytest2(int dummy)
                               resultstr(denytable2[i].result));
                }
 
+               if (res != denytable2[i].result) {
+                       correct = False;
+                       CHECK_MAX_FAILURES(failed);
+               }
+
                smbcli_close(cli1->tree, fnum1);
                smbcli_close(cli2->tree, fnum2);
        }
-               
+
+failed:                
        for (i=0;i<2;i++) {
                smbcli_unlink(cli1->tree, fnames[i]);
        }
@@ -1588,7 +1597,7 @@ BOOL torture_denytest2(int dummy)
                correct = False;
        }
        
-       printf("finshed denytest2\n");
+       printf("finshed denytest2 (%d failures)\n", failures);
        return correct;
 }