mirror of
https://github.com/samba-team/samba.git
synced 2025-03-27 22:50:26 +03:00
r24882: Use the torture API in BASE-CHARSET.
(This used to be commit 93910d92cd431add876e98a12712253bee8c52e7)
This commit is contained in:
parent
0271566a5b
commit
ac2a701483
@ -32,3 +32,4 @@ RPC-DRSUAPI.*/DsCrackNames
|
||||
RPC-DRSUAPI.*/DsGetDomainControllerInfo
|
||||
RPC-DRSUAPI.*/QuerySitesByCost
|
||||
RPC-DRSUAPI.*/DsGetNCChange
|
||||
BASE-CHARSET.*/Testing partial surrogate
|
||||
|
@ -1,4 +1,3 @@
|
||||
BASE-CHARSET
|
||||
BASE-DEFER_OPEN
|
||||
BASE-DELAYWRITE
|
||||
RAW-COMPOSITE
|
||||
|
@ -309,10 +309,7 @@ sub missing_env($$$)
|
||||
{
|
||||
my ($self, $name, $envname) = @_;
|
||||
|
||||
print INDEX "<tr>\n";
|
||||
print INDEX " <td class=\"testSuite\">$name</td>\n";
|
||||
print INDEX " <td class=\"resultSkipped\" colspan=\"2\">SKIPPED - environment `$envname` not available!</td>\n";
|
||||
print INDEX "</tr>\n";
|
||||
$self->skip_testsuite($envname, $name, "environment `$envname` not available!");
|
||||
}
|
||||
|
||||
sub skip_testsuite($$$$)
|
||||
|
@ -1741,7 +1741,7 @@ NTSTATUS torture_base_init(void)
|
||||
torture_suite_add_1smb_test(suite, "PROPERTIES", torture_test_properties);
|
||||
torture_suite_add_1smb_test(suite, "MANGLE", torture_mangle);
|
||||
torture_suite_add_1smb_test(suite, "OPENATTR", torture_openattrtest);
|
||||
torture_suite_add_1smb_test(suite, "CHARSET", torture_charset);
|
||||
torture_suite_add_suite(suite, torture_charset(suite));
|
||||
torture_suite_add_1smb_test(suite, "CHKPATH", torture_chkpath_test);
|
||||
torture_suite_add_1smb_test(suite, "SECLEAK", torture_sec_leak);
|
||||
torture_suite_add_simple_test(suite, "DISCONNECT", torture_disconnect);
|
||||
|
@ -33,7 +33,7 @@
|
||||
the prefix BASEDIR is added before the name
|
||||
*/
|
||||
static NTSTATUS unicode_open(struct torture_context *tctx,
|
||||
struct smbcli_tree *tree,
|
||||
struct smbcli_tree *tree,
|
||||
TALLOC_CTX *mem_ctx,
|
||||
uint32_t open_disposition,
|
||||
const uint32_t *u_name,
|
||||
@ -82,7 +82,7 @@ static NTSTATUS unicode_open(struct torture_context *tctx,
|
||||
io.ntcreatex.in.fname = fname2;
|
||||
io.ntcreatex.in.open_disposition = open_disposition;
|
||||
|
||||
status = smb_raw_open(tree, mem_ctx, &io);
|
||||
status = smb_raw_open(tree, tctx, &io);
|
||||
|
||||
talloc_free(ucs_name);
|
||||
|
||||
@ -93,172 +93,118 @@ static NTSTATUS unicode_open(struct torture_context *tctx,
|
||||
/*
|
||||
see if the server recognises composed characters
|
||||
*/
|
||||
static BOOL test_composed(struct torture_context *tctx,
|
||||
struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
static bool test_composed(struct torture_context *tctx,
|
||||
struct smbcli_state *cli)
|
||||
{
|
||||
const uint32_t name1[] = {0x61, 0x308};
|
||||
const uint32_t name2[] = {0xe4};
|
||||
NTSTATUS status1, status2;
|
||||
|
||||
printf("Testing composite character (a umlaut)\n");
|
||||
|
||||
status1 = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name1, 2);
|
||||
if (!NT_STATUS_IS_OK(status1)) {
|
||||
printf("Failed to create composed name - %s\n",
|
||||
nt_errstr(status1));
|
||||
return False;
|
||||
}
|
||||
torture_assert(tctx, torture_setup_dir(cli, BASEDIR),
|
||||
"setting up basedir");
|
||||
|
||||
status2 = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name2, 1);
|
||||
status1 = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name1, 2);
|
||||
torture_assert_ntstatus_ok(tctx, status1, "Failed to create composed name");
|
||||
|
||||
if (!NT_STATUS_IS_OK(status2)) {
|
||||
printf("Failed to create accented character - %s\n",
|
||||
nt_errstr(status2));
|
||||
return False;
|
||||
}
|
||||
status2 = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name2, 1);
|
||||
|
||||
return True;
|
||||
torture_assert_ntstatus_ok(tctx, status2, "Failed to create accented character");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
see if the server recognises a naked diacritical
|
||||
*/
|
||||
static BOOL test_diacritical(struct torture_context *tctx,
|
||||
struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
static bool test_diacritical(struct torture_context *tctx,
|
||||
struct smbcli_state *cli)
|
||||
{
|
||||
const uint32_t name1[] = {0x308};
|
||||
const uint32_t name2[] = {0x308, 0x308};
|
||||
NTSTATUS status1, status2;
|
||||
|
||||
printf("Testing naked diacritical (umlaut)\n");
|
||||
|
||||
status1 = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name1, 1);
|
||||
torture_assert(tctx, torture_setup_dir(cli, BASEDIR),
|
||||
"setting up basedir");
|
||||
|
||||
if (!NT_STATUS_IS_OK(status1)) {
|
||||
printf("Failed to create naked diacritical - %s\n",
|
||||
nt_errstr(status1));
|
||||
return False;
|
||||
}
|
||||
status1 = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name1, 1);
|
||||
|
||||
torture_assert_ntstatus_ok(tctx, status1, "Failed to create naked diacritical");
|
||||
|
||||
/* try a double diacritical */
|
||||
status2 = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name2, 2);
|
||||
status2 = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name2, 2);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status2)) {
|
||||
printf("Failed to create double naked diacritical - %s\n",
|
||||
nt_errstr(status2));
|
||||
return False;
|
||||
}
|
||||
torture_assert_ntstatus_ok(tctx, status2, "Failed to create double naked diacritical");
|
||||
|
||||
return True;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
see if the server recognises a partial surrogate pair
|
||||
*/
|
||||
static BOOL test_surrogate(struct torture_context *tctx,
|
||||
struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
static bool test_surrogate(struct torture_context *tctx,
|
||||
struct smbcli_state *cli)
|
||||
{
|
||||
const uint32_t name1[] = {0xd800};
|
||||
const uint32_t name2[] = {0xdc00};
|
||||
const uint32_t name3[] = {0xd800, 0xdc00};
|
||||
NTSTATUS status;
|
||||
|
||||
printf("Testing partial surrogate\n");
|
||||
torture_assert(tctx, torture_setup_dir(cli, BASEDIR),
|
||||
"setting up basedir");
|
||||
|
||||
status = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name1, 1);
|
||||
status = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name1, 1);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Failed to create partial surrogate 1 - %s\n",
|
||||
nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
torture_assert_ntstatus_ok(tctx, status, "Failed to create partial surrogate 1");
|
||||
|
||||
status = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name2, 1);
|
||||
status = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name2, 1);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Failed to create partial surrogate 2 - %s\n",
|
||||
nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
torture_assert_ntstatus_ok(tctx, status, "Failed to create partial surrogate 2");
|
||||
|
||||
status = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name3, 2);
|
||||
status = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name3, 2);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Failed to create full surrogate - %s\n",
|
||||
nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
torture_assert_ntstatus_ok(tctx, status, "Failed to create full surrogate");
|
||||
|
||||
return True;
|
||||
return true;
|
||||
}
|
||||
|
||||
/*
|
||||
see if the server recognises wide-a characters
|
||||
*/
|
||||
static BOOL test_widea(struct torture_context *tctx,
|
||||
struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
|
||||
static bool test_widea(struct torture_context *tctx,
|
||||
struct smbcli_state *cli)
|
||||
{
|
||||
const uint32_t name1[] = {'a'};
|
||||
const uint32_t name2[] = {0xff41};
|
||||
const uint32_t name3[] = {0xff21};
|
||||
NTSTATUS status;
|
||||
|
||||
printf("Testing wide-a\n");
|
||||
|
||||
status = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name1, 1);
|
||||
torture_assert(tctx, torture_setup_dir(cli, BASEDIR),
|
||||
"setting up basedir");
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Failed to create 'a' - %s\n",
|
||||
nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
status = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name1, 1);
|
||||
|
||||
status = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name2, 1);
|
||||
torture_assert_ntstatus_ok(tctx, status, "Failed to create 'a'");
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Failed to create wide-a - %s\n",
|
||||
nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
status = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name2, 1);
|
||||
|
||||
status = unicode_open(tctx, cli->tree, mem_ctx, NTCREATEX_DISP_CREATE, name3, 1);
|
||||
torture_assert_ntstatus_ok(tctx, status, "Failed to create wide-a");
|
||||
|
||||
if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
|
||||
printf("Expected %s creating wide-A - %s\n",
|
||||
nt_errstr(NT_STATUS_OBJECT_NAME_COLLISION),
|
||||
nt_errstr(status));
|
||||
return False;
|
||||
}
|
||||
status = unicode_open(tctx, cli->tree, tctx, NTCREATEX_DISP_CREATE, name3, 1);
|
||||
|
||||
return True;
|
||||
torture_assert_ntstatus_equal(tctx, status, NT_STATUS_OBJECT_NAME_COLLISION,
|
||||
"Failed to create wide-A");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL torture_charset(struct torture_context *tctx, struct smbcli_state *cli)
|
||||
struct torture_suite *torture_charset(TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
BOOL ret = True;
|
||||
TALLOC_CTX *mem_ctx;
|
||||
struct torture_suite *suite = torture_suite_create(mem_ctx, "CHARSET");
|
||||
|
||||
mem_ctx = talloc_init("torture_charset");
|
||||
torture_suite_add_1smb_test(suite, "Testing composite character (a umlaut)", test_composed);
|
||||
torture_suite_add_1smb_test(suite, "Testing naked diacritical (umlaut)", test_diacritical);
|
||||
torture_suite_add_1smb_test(suite, "Testing partial surrogate", test_surrogate);
|
||||
torture_suite_add_1smb_test(suite, "Testing wide-a", test_widea);
|
||||
|
||||
if (!torture_setup_dir(cli, BASEDIR)) {
|
||||
return False;
|
||||
}
|
||||
|
||||
if (!test_composed(tctx, cli, mem_ctx)) {
|
||||
ret = False;
|
||||
}
|
||||
|
||||
if (!test_diacritical(tctx, cli, mem_ctx)) {
|
||||
ret = False;
|
||||
}
|
||||
|
||||
if (!test_surrogate(tctx, cli, mem_ctx)) {
|
||||
ret = False;
|
||||
}
|
||||
|
||||
if (!test_widea(tctx, cli, mem_ctx)) {
|
||||
ret = False;
|
||||
}
|
||||
|
||||
return ret;
|
||||
return suite;
|
||||
}
|
||||
|
@ -71,8 +71,7 @@ NTSTATUS torture_raw_init(void)
|
||||
torture_samba3_posixtimedlock);
|
||||
torture_suite_add_simple_test(suite, "SCAN-EAMAX", torture_max_eas);
|
||||
|
||||
suite->description = talloc_strdup(suite,
|
||||
"Tests for the raw SMB interface");
|
||||
suite->description = talloc_strdup(suite, "Tests for the raw SMB interface");
|
||||
|
||||
torture_register_suite(suite);
|
||||
|
||||
|
@ -829,10 +829,9 @@ static bool wrap_simple_1smb_test(struct torture_context *torture_ctx,
|
||||
}
|
||||
|
||||
_PUBLIC_ struct torture_test *torture_suite_add_1smb_test(
|
||||
struct torture_suite *suite,
|
||||
const char *name,
|
||||
bool (*run) (struct torture_context *,
|
||||
struct smbcli_state *))
|
||||
struct torture_suite *suite,
|
||||
const char *name,
|
||||
bool (*run) (struct torture_context *, struct smbcli_state *))
|
||||
{
|
||||
struct torture_test *test;
|
||||
struct torture_tcase *tcase;
|
||||
|
20
testdata/samba3/smb.conf
vendored
20
testdata/samba3/smb.conf
vendored
@ -5,19 +5,19 @@
|
||||
debug level = 5
|
||||
|
||||
[cd1]
|
||||
path = /mnt/cd1
|
||||
public = yes
|
||||
path = /mnt/cd1
|
||||
public = yes
|
||||
|
||||
[cd2]
|
||||
path = /mnt/cd2
|
||||
public = yes
|
||||
path = /mnt/cd2
|
||||
public = yes
|
||||
|
||||
[media]
|
||||
path = /media
|
||||
public = yes
|
||||
path = /media
|
||||
public = yes
|
||||
|
||||
[tmp]
|
||||
path = /tmp
|
||||
guest only = yes
|
||||
public = yes
|
||||
read only = no
|
||||
path = /tmp
|
||||
guest only = yes
|
||||
public = yes
|
||||
read only = no
|
||||
|
Loading…
x
Reference in New Issue
Block a user