Skip to content

Commit

Permalink
r24882: Use the torture API in BASE-CHARSET.
Browse files Browse the repository at this point in the history
(This used to be commit 93910d9)
  • Loading branch information
jelmer authored and Gerald (Jerry) Carter committed Oct 10, 2007
1 parent 0271566 commit ac2a701
Show file tree
Hide file tree
Showing 8 changed files with 70 additions and 129 deletions.
1 change: 1 addition & 0 deletions source4/samba4-knownfail
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ RPC-DRSUAPI.*/DsCrackNames
RPC-DRSUAPI.*/DsGetDomainControllerInfo
RPC-DRSUAPI.*/QuerySitesByCost
RPC-DRSUAPI.*/DsGetNCChange
BASE-CHARSET.*/Testing partial surrogate
1 change: 0 additions & 1 deletion source4/samba4-skip
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
BASE-CHARSET
BASE-DEFER_OPEN
BASE-DELAYWRITE
RAW-COMPOSITE
Expand Down
5 changes: 1 addition & 4 deletions source4/selftest/output/html.pm
Original file line number Diff line number Diff line change
Expand Up @@ -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($$$$)
Expand Down
2 changes: 1 addition & 1 deletion source4/torture/basic/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
160 changes: 53 additions & 107 deletions source4/torture/basic/charset.c
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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);

Expand All @@ -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);

torture_assert_ntstatus_ok(tctx, status2, "Failed to create accented character");

return True;
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;

mem_ctx = talloc_init("torture_charset");

if (!torture_setup_dir(cli, BASEDIR)) {
return False;
}

if (!test_composed(tctx, cli, mem_ctx)) {
ret = False;
}
struct torture_suite *suite = torture_suite_create(mem_ctx, "CHARSET");

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;
}
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);

return ret;
return suite;
}
3 changes: 1 addition & 2 deletions source4/torture/raw/raw.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);

Expand Down
7 changes: 3 additions & 4 deletions source4/torture/util_smb.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
20 changes: 10 additions & 10 deletions testdata/samba3/smb.conf
Original file line number Diff line number Diff line change
Expand Up @@ -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

0 comments on commit ac2a701

Please sign in to comment.