From: Volker Lendecke Date: Thu, 8 Nov 2018 12:27:58 +0000 (+0100) Subject: selftest: Test hide new files timeout X-Git-Tag: tdb-1.3.17~836 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f21bc3addaafc857f0645378d4635d91c620c2f9;p=thirdparty%2Fsamba.git selftest: Test hide new files timeout Signed-off-by: Volker Lendecke Reviewed-by: Jeremy Allison Autobuild-User(master): Jeremy Allison Autobuild-Date(master): Fri Nov 9 03:49:55 CET 2018 on sn-devel-144 --- diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm index 91665114661..569b5d69517 100755 --- a/selftest/target/Samba3.pm +++ b/selftest/target/Samba3.pm @@ -838,6 +838,10 @@ sub setup_simpleserver path = $prefix_abs/share vfs objects = smb encrypt = desired + +[hidenewfiles] + path = $prefix_abs/share + hide new files timeout = 5 "; my $vars = $self->provision($path, "WORKGROUP", diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py index 720485db7db..98d13d3c4f7 100755 --- a/source3/selftest/tests.py +++ b/source3/selftest/tests.py @@ -128,6 +128,18 @@ for t in tests: plantestsuite("samba3.smbtorture_s3.vfs_aio_pthread(simpleserver).%s" % t, "simpleserver", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/vfs_aio_pthread', '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"]) plantestsuite("samba3.smbtorture_s3.vfs_aio_fork(simpleserver).%s" % t, "simpleserver", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), t, '//$SERVER_IP/vfs_aio_fork', '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"]) +plantestsuite("samba3.smbtorture_s3.hidenewfiles(simpleserver)", + "simpleserver", + [os.path.join(samba3srcdir, + "script/tests/test_smbtorture_s3.sh"), + 'hide-new-files-timeout', + '//$SERVER_IP/hidenewfiles', + '$USERNAME', + '$PASSWORD', + smbtorture3, + "", + "-l $LOCAL_PATH"]) + shares = [ "vfs_aio_pthread_async_dosmode_default1", "vfs_aio_pthread_async_dosmode_default2", diff --git a/source3/torture/proto.h b/source3/torture/proto.h index 1634da49315..669e077051e 100644 --- a/source3/torture/proto.h +++ b/source3/torture/proto.h @@ -137,5 +137,6 @@ bool run_g_lock5(int dummy); bool run_g_lock6(int dummy); bool run_g_lock_ping_pong(int dummy); bool run_local_namemap_cache1(int dummy); +bool run_hidenewfiles(int dummy); #endif /* __TORTURE_H__ */ diff --git a/source3/torture/test_hidenewfiles.c b/source3/torture/test_hidenewfiles.c new file mode 100644 index 00000000000..2f1638a6ae7 --- /dev/null +++ b/source3/torture/test_hidenewfiles.c @@ -0,0 +1,173 @@ +/* + * Unix SMB/CIFS implementation. + * Test pthreadpool_tevent + * Copyright (C) Volker Lendecke 2018 + * + * 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 3 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, see . + */ + +#include "includes.h" +#include "torture/proto.h" +#include "libsmb/libsmb.h" +#include "libcli/security/security.h" + +static NTSTATUS servertime( + struct cli_state *cli, const char *fname, struct timeval *tv) +{ + struct smb_create_returns cr; + NTSTATUS status; + uint16_t fnum; + + status = cli_ntcreate( + cli, + fname, + 0, + FILE_GENERIC_WRITE|DELETE_ACCESS, + FILE_ATTRIBUTE_NORMAL, + 0, + FILE_CREATE, + FILE_DELETE_ON_CLOSE, + 0, + &fnum, + &cr); + if (!NT_STATUS_IS_OK(status)) { + d_printf("cli_ntcreate failed: %s\n", nt_errstr(status)); + return status; + } + + status = cli_close(cli, fnum); + if (!NT_STATUS_IS_OK(status)) { + d_printf("cli_close failed: %s\n", nt_errstr(status)); + return status; + } + + nttime_to_timeval(tv, cr.creation_time); + + return NT_STATUS_OK; +} + +struct have_file_state { + bool found; + const char *fname; +}; + +static NTSTATUS have_file_fn(const char *mntpoint, + struct file_info *f, + const char *mask, + void *private_data) +{ + struct have_file_state *state = private_data; + state->found |= strequal(f->name, state->fname); + return NT_STATUS_OK; +} + +static bool have_file(struct cli_state *cli, const char *fname) +{ + struct have_file_state state = { .fname = fname }; + NTSTATUS status; + + status = cli_list( + cli, + "*.*", + FILE_ATTRIBUTE_DIRECTORY| + FILE_ATTRIBUTE_SYSTEM| + FILE_ATTRIBUTE_HIDDEN, + have_file_fn, + &state); + if (!NT_STATUS_IS_OK(status)) { + d_printf("cli_list failed: %s\n", nt_errstr(status)); + return false; + } + + return state.found; +} + +bool run_hidenewfiles(int dummy) +{ + const char *tsname = "timestamp.txt"; + const char *fname = "new_hidden.txt"; + struct cli_state *cli; + struct smb_create_returns cr; + struct timeval create_time; + uint16_t fnum; + NTSTATUS status; + bool ret = false; + bool gotit = false; + bool ok; + + /* what is configure in smb.conf */ + unsigned hideunreadable_seconds = 5; + + ok = torture_open_connection(&cli, 0); + if (!ok) { + return false; + } + + cli_unlink(cli, tsname, FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN); + cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_HIDDEN); + + status = cli_ntcreate( + cli, + fname, + 0, + FILE_GENERIC_WRITE|DELETE_ACCESS, + FILE_ATTRIBUTE_NORMAL, + 0, + FILE_CREATE, + 0, + 0, + &fnum, + &cr); + if (!NT_STATUS_IS_OK(status)) { + d_printf("cli_ntcreate failed: %s\n", nt_errstr(status)); + return false; + } + nttime_to_timeval(&create_time, cr.last_write_time); + + while (!gotit) { + struct timeval now; + double age; + + gotit = have_file(cli, fname); + + status = servertime(cli, tsname, &now); + if (!NT_STATUS_IS_OK(status)) { + d_printf("servertime failed: %s\n", + nt_errstr(status)); + goto fail; + } + age = timeval_elapsed2(&create_time, &now); + + if ((age < hideunreadable_seconds) && gotit) { + d_printf("Found file at age of %f\n", age); + goto fail; + } + if ((age > (hideunreadable_seconds*10)) && !gotit) { + d_printf("Did not find file after %f seconds\n", age); + goto fail; + } + if (gotit) { + break; + } + + smb_msleep(1000); + } + + ret = true; +fail: + cli_nt_delete_on_close(cli, fnum, true); + cli_close(cli, fnum); + + return ret; +} diff --git a/source3/torture/torture.c b/source3/torture/torture.c index 333b1f1c26a..22810f081b8 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -11878,6 +11878,7 @@ static struct { { "LOCAL-CANONICALIZE-PATH", run_local_canonicalize_path, 0 }, { "LOCAL-NAMEMAP-CACHE1", run_local_namemap_cache1, 0 }, { "qpathinfo-bufsize", run_qpathinfo_bufsize, 0 }, + { "hide-new-files-timeout", run_hidenewfiles, 0 }, {NULL, NULL, 0}}; /**************************************************************************** diff --git a/source3/wscript_build b/source3/wscript_build index 50d675cf3fc..a8ea8e581df 100644 --- a/source3/wscript_build +++ b/source3/wscript_build @@ -1196,6 +1196,7 @@ bld.SAMBA3_BINARY('smbtorture' + bld.env.suffix3, torture/wbc_async.c torture/test_g_lock.c torture/test_namemap_cache.c + torture/test_hidenewfiles.c ''', deps=''' talloc