From d200f9385f1088240eb588deb94550291796ca10 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Mon, 25 Oct 2004 07:24:46 +0000 Subject: r3203: moved more test functions into torture/basic/*.c the idea is that torture/torture.c should eventually be just the harness code, which will make it easier to read (This used to be commit eca85d26ed744563d1bbb8dd10a819d39fdc495b) --- source4/torture/basic/dir.c | 185 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 source4/torture/basic/dir.c (limited to 'source4/torture/basic/dir.c') diff --git a/source4/torture/basic/dir.c b/source4/torture/basic/dir.c new file mode 100644 index 0000000000..a5996ae5ab --- /dev/null +++ b/source4/torture/basic/dir.c @@ -0,0 +1,185 @@ +/* + Unix SMB/CIFS implementation. + + directory scanning tests + + Copyright (C) Andrew Tridgell 2003 + + 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, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include "includes.h" + +static void list_fn(file_info *finfo, const char *name, void *state) +{ + +} + +/* + test directory listing speed + */ +BOOL torture_dirtest1(int dummy) +{ + int i; + struct smbcli_state *cli; + int fnum; + double t1; + BOOL correct = True; + extern int torture_numops; + + printf("starting dirtest1\n"); + + if (!torture_open_connection(&cli)) { + return False; + } + + printf("Creating %d random filenames\n", torture_numops); + + srandom(0); + for (i=0;itree, fname, O_RDWR|O_CREAT, DENY_NONE); + if (fnum == -1) { + fprintf(stderr,"Failed to open %s\n", fname); + return False; + } + smbcli_close(cli->tree, fnum); + free(fname); + } + + t1 = end_timer(); + + printf("Matched %d\n", smbcli_list(cli->tree, "a*.*", 0, list_fn, NULL)); + printf("Matched %d\n", smbcli_list(cli->tree, "b*.*", 0, list_fn, NULL)); + printf("Matched %d\n", smbcli_list(cli->tree, "xyzabc", 0, list_fn, NULL)); + + printf("dirtest core %g seconds\n", end_timer() - t1); + + srandom(0); + for (i=0;itree, fname); + free(fname); + } + + if (!torture_close_connection(cli)) { + correct = False; + } + + printf("finished dirtest1\n"); + + return correct; +} + +BOOL torture_dirtest2(int dummy) +{ + int i; + struct smbcli_state *cli; + int fnum, num_seen; + BOOL correct = True; + extern int torture_entries; + + printf("starting dirtest2\n"); + + if (!torture_open_connection(&cli)) { + return False; + } + + if (smbcli_deltree(cli->tree, "\\LISTDIR") == -1) { + fprintf(stderr,"Failed to deltree %s, error=%s\n", "\\LISTDIR", smbcli_errstr(cli->tree)); + return False; + } + if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, "\\LISTDIR"))) { + fprintf(stderr,"Failed to mkdir %s, error=%s\n", "\\LISTDIR", smbcli_errstr(cli->tree)); + return False; + } + + printf("Creating %d files\n", torture_entries); + + /* Create torture_entries files and torture_entries directories. */ + for (i=0;itree, fname, 0, GENERIC_RIGHTS_FILE_ALL_ACCESS, FILE_ATTRIBUTE_ARCHIVE, + NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_WRITE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0); + if (fnum == -1) { + fprintf(stderr,"Failed to open %s, error=%s\n", fname, smbcli_errstr(cli->tree)); + return False; + } + free(fname); + smbcli_close(cli->tree, fnum); + } + for (i=0;itree, fname))) { + fprintf(stderr,"Failed to open %s, error=%s\n", fname, smbcli_errstr(cli->tree)); + return False; + } + free(fname); + } + + /* Now ensure that doing an old list sees both files and directories. */ + num_seen = smbcli_list_old(cli->tree, "\\LISTDIR\\*", FILE_ATTRIBUTE_DIRECTORY, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + /* We should see (torture_entries) each of files & directories + . and .. */ + if (num_seen != (2*torture_entries)+2) { + correct = False; + fprintf(stderr,"entry count mismatch, should be %d, was %d\n", + (2*torture_entries)+2, num_seen); + } + + + /* Ensure if we have the "must have" bits we only see the + * relevant entries. + */ + num_seen = smbcli_list_old(cli->tree, "\\LISTDIR\\*", (FILE_ATTRIBUTE_DIRECTORY<<8)|FILE_ATTRIBUTE_DIRECTORY, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + if (num_seen != torture_entries+2) { + correct = False; + fprintf(stderr,"entry count mismatch, should be %d, was %d\n", + torture_entries+2, num_seen); + } + + num_seen = smbcli_list_old(cli->tree, "\\LISTDIR\\*", (FILE_ATTRIBUTE_ARCHIVE<<8)|FILE_ATTRIBUTE_DIRECTORY, list_fn, NULL); + printf("num_seen = %d\n", num_seen ); + if (num_seen != torture_entries) { + correct = False; + fprintf(stderr,"entry count mismatch, should be %d, was %d\n", + torture_entries, num_seen); + } + + /* Delete everything. */ + if (smbcli_deltree(cli->tree, "\\LISTDIR") == -1) { + fprintf(stderr,"Failed to deltree %s, error=%s\n", "\\LISTDIR", smbcli_errstr(cli->tree)); + return False; + } + +#if 0 + printf("Matched %d\n", smbcli_list(cli->tree, "a*.*", 0, list_fn, NULL)); + printf("Matched %d\n", smbcli_list(cli->tree, "b*.*", 0, list_fn, NULL)); + printf("Matched %d\n", smbcli_list(cli->tree, "xyzabc", 0, list_fn, NULL)); +#endif + + if (!torture_close_connection(cli)) { + correct = False; + } + + printf("finished dirtest1\n"); + + return correct; +} -- cgit