1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-08 04:58:40 +03:00

r25443: Enhance the WINBINDD-STRUCT-SHOW_SEQUENCE test:

Compare the lists of sequence numbers obtained by
(a) calling SHOW_SEQUENCE without domain argument and
(b) walking the list of trusted domains.
output the sequence numbers of the individual domains upon success.

Michael
(This used to be commit 21db6eb43c796da7607260d783221c5ee42f1f41)
This commit is contained in:
Michael Adam 2007-10-01 15:45:01 +00:00 committed by Gerald (Jerry) Carter
parent ca61e8668c
commit 3f466b1aab

View File

@ -585,14 +585,22 @@ static bool torture_winbind_struct_list_groups(struct torture_context *torture)
return true;
}
struct torture_domain_sequence {
const char *netbios_name;
uint32_t seq;
};
static bool torture_winbind_struct_show_sequence(struct torture_context *torture)
{
struct winbindd_request req;
struct winbindd_response rep;
bool ok;
const char *extra_data;
fstring line;
uint32_t i;
uint32_t count = 0;
struct torture_trust_domain *domlist = NULL;
int i;
struct torture_domain_sequence *s = NULL;
torture_comment(torture, "Running WINBINDD_SHOW_SEQUENCE (struct based)\n");
@ -603,8 +611,39 @@ static bool torture_winbind_struct_show_sequence(struct torture_context *torture
DO_STRUCT_REQ_REP(WINBINDD_SHOW_SEQUENCE, &req, &rep);
if (rep.extra_data.data) {
torture_comment(torture, "%s", (char *)rep.extra_data.data);
extra_data = (char *)rep.extra_data.data;
torture_assert(torture, extra_data, "NULL sequence list");
torture_comment(torture, "%s", extra_data);
while (next_token(&extra_data, line, "\n", sizeof(fstring))) {
char *p, *lp;
uint32_t seq;
s = talloc_realloc(torture, s, struct torture_domain_sequence,
count + 2);
ZERO_STRUCT(s[count+1]);
lp = line;
p = strchr(lp, ' ');
torture_assert(torture, p, "invalid line format");
*p = 0;
s[count].netbios_name = talloc_strdup(s, lp);
lp = p+1;
torture_assert(torture, strncmp(lp, ": ", 2) == 0, "invalid line format");
lp += 2;
if (strcmp(lp, "DISCONNECTED") == 0) {
seq = (uint32_t)-1;
} else {
seq = (uint32_t)strtol(lp, &p, 10);
torture_assert(torture, (*p == '\0'), "invalid line format");
torture_assert(torture, (seq != (uint32_t)-1),
"sequence number -1 encountered");
}
s[count].seq = seq;
count++;
}
torture_comment(torture, " - getting list of trusted domains\n");
@ -612,15 +651,32 @@ static bool torture_winbind_struct_show_sequence(struct torture_context *torture
torture_assert(torture, ok, "failed to get trust list");
for (i=0; domlist[i].netbios_name; i++) {
uint32_t seq;
ok = (s[i].netbios_name != NULL);
torture_assert(torture, ok, "more domains recieved in second run");
ok = (strcmp(domlist[i].netbios_name, s[i].netbios_name) == 0);
torture_assert(torture, ok, "inconsistent order of domain lists");
ZERO_STRUCT(req);
ZERO_STRUCT(rep);
fstrcpy(req.domain_name, domlist[i].netbios_name);
torture_comment(torture, " - Running WINBINDD_SHOW_SEQUENCE "
"for domain %s:\n", req.domain_name);
DO_STRUCT_REQ_REP(WINBINDD_SHOW_SEQUENCE, &req, &rep);
if (rep.extra_data.data) {
torture_comment(torture, "%s", (char *)rep.extra_data.data);
seq = rep.data.sequence_number;
torture_comment(torture, "%s : ", req.domain_name);
if (seq == (uint32_t)-1) {
torture_comment(torture, "DISCONNECTED\n");
} else {
torture_comment(torture, "%d\n", seq);
}
torture_assert(torture, (seq >= s[i].seq),
"illegal sequence number encountered");
}
return true;