s3:torture:delete: untangle function call from result check
[kai/samba.git] / source3 / torture / denytest.c
index 9b08552df7f7e2f4ca307fc0cd923dc8eca2ab5a..5b0eeec2fa75d8f1acbab1783d32866f7f2a1eed 100644 (file)
@@ -18,6 +18,9 @@
 */
 
 #include "includes.h"
+#include "system/filesys.h"
+#include "torture/proto.h"
+#include "libsmb/libsmb.h"
 
 extern bool torture_showall;
 
@@ -1406,10 +1409,12 @@ static void progress_bar(unsigned i, unsigned total)
 bool torture_denytest1(int dummy)
 {
        struct cli_state *cli1;
-       int fnum1, fnum2;
+       uint16_t fnum1, fnum2;
        int i;
        bool correct = True;
+       NTSTATUS ret1, ret2, status;
        const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
+       size_t nread;
 
        if (!torture_open_connection(&cli1, 0)) {
                return False;
@@ -1418,9 +1423,10 @@ bool torture_denytest1(int dummy)
        printf("starting denytest1\n");
 
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
-               fnum1 = cli_open(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
-               cli_write(cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+               cli_openx(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE, &fnum1);
+               cli_writeall(cli1, fnum1, 0, (const uint8_t *)fnames[i], 0,
+                            strlen(fnames[i]), NULL);
                cli_close(cli1, fnum1);
        }
 
@@ -1432,24 +1438,29 @@ bool torture_denytest1(int dummy)
 
                progress_bar(i, ARRAY_SIZE(denytable1));
 
-               fnum1 = cli_open(cli1, fname, 
+               ret1 = cli_openx(cli1, fname, 
                                 denytable1[i].mode1,
-                                denytable1[i].deny1);
-               fnum2 = cli_open(cli1, fname, 
+                                denytable1[i].deny1, &fnum1);
+               ret2 = cli_openx(cli1, fname, 
                                 denytable1[i].mode2,
-                                denytable1[i].deny2);
+                                denytable1[i].deny2, &fnum2);
 
-               if (fnum1 == -1) {
+               if (!NT_STATUS_IS_OK(ret1)) {
                        res = A_X;
-               } else if (fnum2 == -1) {
+               } else if (!NT_STATUS_IS_OK(ret2)) {
                        res = A_0;
                } else {
                        char x = 1;
                        res = A_0;
-                       if (cli_read(cli1, fnum2, (char *)&x, 0, 1) == 1) {
+
+                       status = cli_read(cli1, fnum2, (char *)&x, 0, 1,
+                                         &nread);
+                       if (NT_STATUS_IS_OK(status) && nread == 1) {
                                res += A_R;
                        }
-                       if (cli_write(cli1, fnum2, 0, (char *)&x, 0, 1) == 1) {
+                       if (NT_STATUS_IS_OK(cli_writeall(cli1, fnum2, 0,
+                                                        (uint8_t *)&x, 0, 1,
+                                                        NULL))) {
                                res += A_W;
                        }
                }
@@ -1469,12 +1480,16 @@ bool torture_denytest1(int dummy)
                               resultstr(denytable1[i].result));
                }
 
-               cli_close(cli1, fnum1);
-               cli_close(cli1, fnum2);
+               if (NT_STATUS_IS_OK(ret1)) {
+                       cli_close(cli1, fnum1);
+               }
+               if (NT_STATUS_IS_OK(ret2)) {
+                       cli_close(cli1, fnum2);
+               }
        }
 
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
        }
                
        if (!torture_close_connection(cli1)) {
@@ -1492,10 +1507,12 @@ bool torture_denytest1(int dummy)
 bool torture_denytest2(int dummy)
 {
        static struct cli_state *cli1, *cli2;
-       int fnum1, fnum2;
+       uint16_t fnum1, fnum2;
        int i;
        bool correct = True;
+       NTSTATUS ret1, ret2, status;
        const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
+       size_t nread;
 
        if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
                return False;
@@ -1504,9 +1521,10 @@ bool torture_denytest2(int dummy)
        printf("starting denytest2\n");
 
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
-               fnum1 = cli_open(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
-               cli_write(cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+               cli_openx(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE, &fnum1);
+               cli_writeall(cli1, fnum1, 0, (const uint8_t *)fnames[i], 0,
+                            strlen(fnames[i]), NULL);
                cli_close(cli1, fnum1);
        }
 
@@ -1516,24 +1534,29 @@ bool torture_denytest2(int dummy)
 
                progress_bar(i, ARRAY_SIZE(denytable2));
 
-               fnum1 = cli_open(cli1, fname, 
+               ret1 = cli_openx(cli1, fname, 
                                 denytable2[i].mode1,
-                                denytable2[i].deny1);
-               fnum2 = cli_open(cli2, fname, 
+                                denytable2[i].deny1, &fnum1);
+               ret2 = cli_openx(cli2, fname, 
                                 denytable2[i].mode2,
-                                denytable2[i].deny2);
+                                denytable2[i].deny2, &fnum2);
 
-               if (fnum1 == -1) {
+               if (!NT_STATUS_IS_OK(ret1)) {
                        res = A_X;
-               } else if (fnum2 == -1) {
+               } else if (!NT_STATUS_IS_OK(ret2)) {
                        res = A_0;
                } else {
                        char x = 1;
                        res = A_0;
-                       if (cli_read(cli2, fnum2, (char *)&x, 0, 1) == 1) {
-                               res += A_R;
-                       }
-                       if (cli_write(cli2, fnum2, 0, (char *)&x, 0, 1) == 1) {
+
+                        status = cli_read(cli2, fnum2, (char *)&x, 0, 1,
+                                          &nread);
+                        if (NT_STATUS_IS_OK(status) && nread == 1) {
+                                res += A_R;
+                        }
+                       if (NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0,
+                                                        (uint8_t *)&x, 0, 1,
+                                                        NULL))) {
                                res += A_W;
                        }
                }
@@ -1553,12 +1576,16 @@ bool torture_denytest2(int dummy)
                               resultstr(denytable2[i].result));
                }
 
-               if (fnum1 != -1) cli_close(cli1, fnum1);
-               if (fnum2 != -1) cli_close(cli2, fnum2);
+               if (NT_STATUS_IS_OK(ret1)) {
+                       cli_close(cli1, fnum1);
+               }
+               if (NT_STATUS_IS_OK(ret2)) {
+                       cli_close(cli2, fnum2);
+               }
        }
                
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
        }
 
        if (!torture_close_connection(cli1)) {