mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
r21347: All current tests in the testsuite mainly test the RPC code in general. Since
we're running the testsuite mainly against ourselves, we only check that the push/pull functions work in our own environment, not whether they generate/parse the same data that other systems do. This commit adds the infrastructure for a testsuite for just the marshalling code. The idea is that you provide a data blob, a function name and a function to check the resulting struct for correctness. (This used to be commit 9bd2421e44dcfcaf08ad61cf25bb7714cf885517)
This commit is contained in:
parent
6d18b574e5
commit
25a0c9146e
@ -89,7 +89,7 @@ import "lsa.idl", "initshutdown.idl", "security.idl";
|
||||
|
||||
/******************/
|
||||
/* Function: 0x05 */
|
||||
WERROR winreg_CloseKey(
|
||||
[public] WERROR winreg_CloseKey(
|
||||
[in,out,ref] policy_handle *handle
|
||||
);
|
||||
|
||||
|
@ -96,6 +96,13 @@ PRIVATE_DEPENDENCIES = TORTURE_UTIL
|
||||
|
||||
include smb2/config.mk
|
||||
|
||||
[MODULE::torture_ndr]
|
||||
SUBSYSTEM = torture
|
||||
INIT_FUNCTION = torture_ndr_init
|
||||
PRIVATE_PROTO_HEADER = ndr/proto.h
|
||||
OBJ_FILES = ndr/ndr.o \
|
||||
ndr/winreg.o
|
||||
|
||||
[MODULE::torture_rpc]
|
||||
# TORTURE_NET and TORTURE_NBT use functions from torture_rpc...
|
||||
#OUTPUT_TYPE = INTEGRATED
|
||||
|
94
source4/torture/ndr/ndr.c
Normal file
94
source4/torture/ndr/ndr.c
Normal file
@ -0,0 +1,94 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
test suite for winreg ndr operations
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2007
|
||||
|
||||
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"
|
||||
#include "torture/ndr/ndr.h"
|
||||
#include "torture/ndr/proto.h"
|
||||
#include "util/dlinklist.h"
|
||||
|
||||
struct ndr_pull_test_data {
|
||||
DATA_BLOB data;
|
||||
size_t struct_size;
|
||||
ndr_pull_flags_fn_t pull_fn;
|
||||
int ndr_flags;
|
||||
};
|
||||
|
||||
static bool wrap_ndr_pull_test(struct torture_context *tctx,
|
||||
struct torture_tcase *tcase,
|
||||
struct torture_test *test)
|
||||
{
|
||||
bool (*check_fn) (struct torture_context *ctx, void *data) = test->fn;
|
||||
const struct ndr_pull_test_data *data = test->data;
|
||||
void *ds = talloc_zero_size(tctx, data->struct_size);
|
||||
struct ndr_pull *ndr = ndr_pull_init_blob(&(data->data), tctx);
|
||||
|
||||
ndr->flags |= LIBNDR_FLAG_REF_ALLOC;
|
||||
|
||||
torture_assert_ntstatus_ok(tctx, data->pull_fn(ndr, data->ndr_flags, ds),
|
||||
"pulling");
|
||||
|
||||
return check_fn(tctx, ds);
|
||||
}
|
||||
|
||||
_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_test(
|
||||
struct torture_suite *suite,
|
||||
const char *name, ndr_pull_flags_fn_t pull_fn,
|
||||
DATA_BLOB db,
|
||||
size_t struct_size,
|
||||
int ndr_flags,
|
||||
bool (*check_fn) (struct torture_context *ctx, void *data))
|
||||
{
|
||||
struct torture_test *test;
|
||||
struct torture_tcase *tcase;
|
||||
struct ndr_pull_test_data *data;
|
||||
|
||||
tcase = torture_suite_add_tcase(suite, name);
|
||||
|
||||
test = talloc(tcase, struct torture_test);
|
||||
|
||||
test->name = talloc_strdup(test, name);
|
||||
test->description = NULL;
|
||||
test->run = wrap_ndr_pull_test;
|
||||
data = talloc(test, struct ndr_pull_test_data);
|
||||
data->data = db;
|
||||
data->ndr_flags = ndr_flags;
|
||||
data->struct_size = struct_size;
|
||||
data->pull_fn = pull_fn;
|
||||
test->data = data;
|
||||
test->fn = check_fn;
|
||||
test->dangerous = false;
|
||||
|
||||
DLIST_ADD_END(tcase->tests, test, struct torture_test *);
|
||||
|
||||
return test;
|
||||
}
|
||||
|
||||
NTSTATUS torture_ndr_init(void)
|
||||
{
|
||||
struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "NDR");
|
||||
|
||||
torture_suite_add_suite(suite, ndr_winreg_suite(suite));
|
||||
|
||||
torture_register_suite(suite);
|
||||
|
||||
return NT_STATUS_OK;
|
||||
}
|
||||
|
45
source4/torture/ndr/ndr.h
Normal file
45
source4/torture/ndr/ndr.h
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
SMB torture tester
|
||||
Copyright (C) Jelmer Vernooij 2007
|
||||
|
||||
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.
|
||||
*/
|
||||
|
||||
#ifndef __TORTURE_NDR_H__
|
||||
#define __TORTURE_NDR_H__
|
||||
|
||||
#include "torture/torture.h"
|
||||
#include "librpc/ndr/libndr.h"
|
||||
|
||||
_PUBLIC_ struct torture_test *_torture_suite_add_ndr_pull_test(
|
||||
struct torture_suite *suite,
|
||||
const char *name, ndr_pull_flags_fn_t fn,
|
||||
DATA_BLOB db,
|
||||
size_t struct_size,
|
||||
int ndr_flags,
|
||||
bool (*check_fn) (struct torture_context *, void *data));
|
||||
|
||||
#define torture_suite_add_ndr_pull_test(suite,name,data,check_fn) \
|
||||
_torture_suite_add_ndr_pull_test(suite, #name, \
|
||||
(ndr_pull_flags_fn_t)ndr_pull_ ## name, data_blob_talloc(suite, data, sizeof(data)), \
|
||||
sizeof(struct name), 0, (bool (*) (struct torture_context *, void *)) check_fn);
|
||||
|
||||
#define torture_suite_add_ndr_pull_fn_test(suite,name,data,flags,check_fn) \
|
||||
_torture_suite_add_ndr_pull_test(suite, #name, \
|
||||
(ndr_pull_flags_fn_t)ndr_pull_ ## name, data_blob_talloc(suite, data, sizeof(data)), \
|
||||
sizeof(struct name), flags, (bool (*) (struct torture_context *, void *)) check_fn);
|
||||
|
||||
#endif /* __TORTURE_NDR_H__ */
|
48
source4/torture/ndr/winreg.c
Normal file
48
source4/torture/ndr/winreg.c
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
Unix SMB/CIFS implementation.
|
||||
test suite for winreg ndr operations
|
||||
|
||||
Copyright (C) Jelmer Vernooij 2007
|
||||
|
||||
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"
|
||||
#include "torture/ndr/ndr.h"
|
||||
#include "librpc/gen_ndr/ndr_winreg.h"
|
||||
#include "librpc/gen_ndr/ndr_security.h"
|
||||
#include "libcli/security/security.h"
|
||||
|
||||
static const uint8_t winreg_closekey_data[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x1d, 0xd8, 0xd7, 0xaa, 0x8d, 0x6c, 0x3f, 0x48,
|
||||
0xa7, 0x1e, 0x02, 0x6a, 0x47, 0xf6, 0x7b, 0xae
|
||||
};
|
||||
|
||||
static bool winreg_closekey_check(struct torture_context *tctx,
|
||||
struct winreg_CloseKey *ck)
|
||||
{
|
||||
torture_assert(tctx, ck->in.handle != NULL, "handle invalid");
|
||||
torture_assert_int_equal(tctx, ck->in.handle->handle_type, 0, "handle type");
|
||||
return true;
|
||||
}
|
||||
|
||||
struct torture_suite *ndr_winreg_suite(TALLOC_CTX *ctx)
|
||||
{
|
||||
struct torture_suite *suite = torture_suite_create(ctx, "winreg");
|
||||
|
||||
torture_suite_add_ndr_pull_fn_test(suite, winreg_CloseKey, winreg_closekey_data, NDR_IN, winreg_closekey_check );
|
||||
|
||||
return suite;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user