s3:torture:delete: untangle function call from result check
[kai/samba.git] / source3 / torture / nbio.c
index 063df1693f56e41862aebe97d1d6f70421374f56..0c918c11bad7691648d3403109bf908cba22b01f 100644 (file)
@@ -21,6 +21,9 @@
 
 #include "includes.h"
 #include "torture/proto.h"
+#include "../libcli/security/security.h"
+#include "libsmb/libsmb.h"
+#include "libsmb/clirap.h"
 
 #define MAX_FILES 1000
 
@@ -28,6 +31,7 @@ static char buf[70000];
 extern int line_count;
 extern int nbio_id;
 static int nprocs;
+static struct timeval nb_start;
 
 static struct {
        int fd;
@@ -61,7 +65,9 @@ void nb_alarm(int ignore)
                if (!children[i].done) num_clients++;
        }
 
-       printf("%4d  %8d  %.2f MB/sec\r", num_clients, lines/nprocs, 1.0e-6 * nbio_total() / end_timer());
+       printf("%4d  %8d  %.2f MB/sec\r",
+              num_clients, lines/nprocs,
+              1.0e-6 * nbio_total() / timeval_elapsed(&nb_start));
 
        signal(SIGALRM, nb_alarm);
        alarm(1);       
@@ -70,7 +76,7 @@ void nb_alarm(int ignore)
 void nbio_shmem(int n)
 {
        nprocs = n;
-       children = (struct children *)shm_setup(sizeof(*children) * nprocs);
+       children = (struct children *)anonymous_shared_allocate(sizeof(*children) * nprocs);
        if (!children) {
                printf("Failed to setup shared memory!\n");
                exit(1);
@@ -122,17 +128,20 @@ void nb_setup(struct cli_state *cli)
 {
        signal(SIGSEGV, sigsegv);
        c = cli;
-       start_timer();
+       nb_start = timeval_current();
        children[nbio_id].done = 0;
 }
 
 
 void nb_unlink(const char *fname)
 {
-       if (!NT_STATUS_IS_OK(cli_unlink(c, fname, aSYSTEM | aHIDDEN))) {
+       NTSTATUS status;
+
+       status = cli_unlink(c, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+       if (!NT_STATUS_IS_OK(status)) {
 #if NBDEBUG
                printf("(%d) unlink %s failed (%s)\n", 
-                      line_count, fname, cli_errstr(c));
+                      line_count, fname, nt_errstr(status));
 #endif
        }
 }
@@ -160,7 +169,7 @@ void nb_createx(const char *fname,
                                create_options, 0, &fd);
        if (!NT_STATUS_IS_OK(status) && handle != -1) {
                printf("ERROR: cli_ntcreate failed for %s - %s\n",
-                      fname, cli_errstr(c));
+                      fname, nt_errstr(status));
                exit(1);
        }
        if (NT_STATUS_IS_OK(status) && handle == -1) {
@@ -184,13 +193,17 @@ void nb_createx(const char *fname,
 void nb_writex(int handle, int offset, int size, int ret_size)
 {
        int i;
+       NTSTATUS status;
 
        if (buf[0] == 0) memset(buf, 1, sizeof(buf));
 
        i = find_handle(handle);
-       if (cli_write(c, ftable[i].fd, 0, buf, offset, size) != ret_size) {
-               printf("(%d) ERROR: write failed on handle %d, fd %d \
-errno %d (%s)\n", line_count, handle, ftable[i].fd, errno, strerror(errno));
+       status = cli_writeall(c, ftable[i].fd, 0, (uint8_t *)buf, offset, size,
+                             NULL);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("(%d) ERROR: write failed on handle %d, fd %d "
+                      "error %s\n", line_count, handle, ftable[i].fd,
+                      nt_errstr(status));
                exit(1);
        }
 
@@ -199,12 +212,23 @@ errno %d (%s)\n", line_count, handle, ftable[i].fd, errno, strerror(errno));
 
 void nb_readx(int handle, int offset, int size, int ret_size)
 {
-       int i, ret;
+       int i;
+       NTSTATUS status;
+       size_t nread;
 
        i = find_handle(handle);
-       if ((ret=cli_read(c, ftable[i].fd, buf, offset, size)) != ret_size) {
-               printf("(%d) ERROR: read failed on handle %d ofs=%d size=%d res=%d fd %d errno %d (%s)\n",
-                       line_count, handle, offset, size, ret, ftable[i].fd, errno, strerror(errno));
+       status = cli_read(c, ftable[i].fd, buf, offset, size, &nread);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("(%d) ERROR: read failed on handle %d ofs=%d size=%d "
+                      "fd %d nterror %s\n",
+                      line_count, handle, offset, size,
+                      ftable[i].fd, nt_errstr(status));
+               exit(1);
+       } else if (nread != ret_size) {
+               printf("(%d) ERROR: read failed on handle %d ofs=%d size=%d "
+                      "nread=%lu ret_size=%d fd %d\n",
+                      line_count, handle, offset, size, (unsigned long)nread,
+                      ret_size, ftable[i].fd);
                exit(1);
        }
        children[nbio_id].bytes_in += ret_size;
@@ -223,18 +247,24 @@ void nb_close(int handle)
 
 void nb_rmdir(const char *fname)
 {
-       if (!NT_STATUS_IS_OK(cli_rmdir(c, fname))) {
+       NTSTATUS status;
+
+       status = cli_rmdir(c, fname);
+       if (!NT_STATUS_IS_OK(status)) {
                printf("ERROR: rmdir %s failed (%s)\n", 
-                      fname, cli_errstr(c));
+                      fname, nt_errstr(status));
                exit(1);
        }
 }
 
 void nb_rename(const char *oldname, const char *newname)
 {
-       if (!NT_STATUS_IS_OK(cli_rename(c, oldname, newname))) {
+       NTSTATUS status;
+
+       status = cli_rename(c, oldname, newname);
+       if (!NT_STATUS_IS_OK(status)) {
                printf("ERROR: rename %s %s failed (%s)\n", 
-                      oldname, newname, cli_errstr(c));
+                      oldname, newname, nt_errstr(status));
                exit(1);
        }
 }
@@ -242,14 +272,15 @@ void nb_rename(const char *oldname, const char *newname)
 
 void nb_qpathinfo(const char *fname)
 {
-       cli_qpathinfo(c, fname, NULL, NULL, NULL, NULL, NULL);
+       cli_qpathinfo1(c, fname, NULL, NULL, NULL, NULL, NULL);
 }
 
 void nb_qfileinfo(int fnum)
 {
        int i;
        i = find_handle(fnum);
-       cli_qfileinfo(c, ftable[i].fd, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
+       cli_qfileinfo_basic(c, ftable[i].fd, NULL, NULL, NULL, NULL, NULL,
+                           NULL, NULL);
 }
 
 void nb_qfsinfo(int level)
@@ -259,9 +290,11 @@ void nb_qfsinfo(int level)
        cli_dskattr(c, &bsize, &total, &avail);
 }
 
-static void find_fn(const char *mnt, file_info *finfo, const char *name, void *state)
+static NTSTATUS find_fn(const char *mnt, struct file_info *finfo, const char *name,
+                   void *state)
 {
        /* noop */
+       return NT_STATUS_OK;
 }
 
 void nb_findfirst(const char *mask)
@@ -278,24 +311,33 @@ void nb_flush(int fnum)
 
 static int total_deleted;
 
-static void delete_fn(const char *mnt, file_info *finfo, const char *name, void *state)
+static NTSTATUS delete_fn(const char *mnt, struct file_info *finfo,
+                     const char *name, void *state)
 {
+       NTSTATUS status;
        char *s, *n;
-       if (finfo->name[0] == '.') return;
+       if (finfo->name[0] == '.') {
+               return NT_STATUS_OK;
+       }
 
        n = SMB_STRDUP(name);
        n[strlen(n)-1] = 0;
        if (asprintf(&s, "%s%s", n, finfo->name) == -1) {
                printf("asprintf failed\n");
-               return;
+               return NT_STATUS_NO_MEMORY;
        }
-       if (finfo->mode & aDIR) {
+       if (finfo->mode & FILE_ATTRIBUTE_DIRECTORY) {
                char *s2;
                if (asprintf(&s2, "%s\\*", s) == -1) {
                        printf("asprintf failed\n");
-                       return;
+                       return NT_STATUS_NO_MEMORY;
+               }
+               status = cli_list(c, s2, FILE_ATTRIBUTE_DIRECTORY, delete_fn, NULL);
+               if (!NT_STATUS_IS_OK(status)) {
+                       free(n);
+                       free(s2);
+                       return status;
                }
-               cli_list(c, s2, aDIR, delete_fn, NULL);
                nb_rmdir(s);
        } else {
                total_deleted++;
@@ -303,6 +345,7 @@ static void delete_fn(const char *mnt, file_info *finfo, const char *name, void
        }
        free(s);
        free(n);
+       return NT_STATUS_OK;
 }
 
 void nb_deltree(const char *dname)
@@ -314,7 +357,7 @@ void nb_deltree(const char *dname)
        }
 
        total_deleted = 0;
-       cli_list(c, mask, aDIR, delete_fn, NULL);
+       cli_list(c, mask, FILE_ATTRIBUTE_DIRECTORY, delete_fn, NULL);
        free(mask);
        cli_rmdir(c, dname);