s4-smbtorture: add netsessiongetinfo() test.
authorGünther Deschner <gd@samba.org>
Fri, 18 Mar 2011 00:23:53 +0000 (01:23 +0100)
committerGünther Deschner <gd@samba.org>
Fri, 18 Mar 2011 01:11:38 +0000 (02:11 +0100)
Guenther

Autobuild-User: Günther Deschner <gd@samba.org>
Autobuild-Date: Fri Mar 18 02:11:38 CET 2011 on sn-devel-104

source3/selftest/knownfail
source4/selftest/knownfail
source4/torture/rap/rap.c

index ad8065a2cad662474b2485559a145f0061cc804d..95f01f64dcf58365a0e774176c84dffd66704864 100644 (file)
@@ -11,3 +11,4 @@ samba3.smbtorture_s3.*OPLOCK4 # fails sometimes on sn-devel
 samba3.posix_s3.nbt.dgram.*netlogon2
 samba3.*rap.sam.*.useradd # Not provided by Samba 3
 samba3.*rap.sam.*.userdelete # Not provided by Samba 3
+samba3.*rap.basic.*.netsessiongetinfo # Not provided by Samba 3
index a9cc4446c489799f5e11275b706fabadec110bac..cdd7a2d30695b9682e53d4476f6b055e1f9f659e 100644 (file)
@@ -40,6 +40,7 @@ samba4.base.charset.*.Testing partial surrogate
 .*net.api.delshare.*                           # DelShare isn't implemented yet
 samba4.rap.*netservergetinfo
 samba4.rap.*netsessionenum
+samba4.rap.*netsessiongetinfo
 samba4.smb2.persistent.handles1
 samba4.winbind.struct.*.show_sequence     # Not yet working in winbind
 samba4.winbind.struct.*.getpwent          # Not yet working in winbind
index c31979f0b28283403db763178e3629561e91d0c3..5c1c5e196c680500705856f42abcd107cbcd467c 100644 (file)
@@ -149,6 +149,64 @@ static bool test_netsessionenum(struct torture_context *tctx,
        return true;
 }
 
+static bool test_netsessiongetinfo_bysession(struct torture_context *tctx,
+                                            struct smbcli_state *cli,
+                                            const char *session)
+{
+       struct rap_NetSessionGetInfo r;
+       int i;
+       uint16_t levels[] = { 2 };
+
+       if (session && session[0] == '\\' && session[1] == '\\') {
+               r.in.SessionName = session;
+       } else {
+               r.in.SessionName = talloc_asprintf(tctx, "\\\\%s", session);
+       }
+       r.in.bufsize = 0xffff;
+
+       for (i=0; i < ARRAY_SIZE(levels); i++) {
+
+               r.in.level = levels[i];
+
+               torture_assert_ntstatus_ok(tctx,
+                       smbcli_rap_netsessiongetinfo(cli->tree, tctx, &r),
+                       "rap_netsessiongetinfo failed");
+               torture_assert_werr_ok(tctx, W_ERROR(r.out.status),
+                       "rap_netsessiongetinfo failed");
+       }
+
+       return true;
+}
+
+static bool test_netsessiongetinfo(struct torture_context *tctx,
+                                  struct smbcli_state *cli)
+{
+       struct rap_NetSessionEnum r;
+       int i,n;
+       uint16_t levels[] = { 2 };
+
+       for (i=0; i < ARRAY_SIZE(levels); i++) {
+
+               r.in.level = levels[i];
+               r.in.bufsize = 8192;
+
+               torture_assert_ntstatus_ok(tctx,
+                       smbcli_rap_netsessionenum(cli->tree, tctx, &r),
+                       "smbcli_rap_netsessionenum failed");
+               torture_assert_werr_ok(tctx, W_ERROR(r.out.status),
+                       "smbcli_rap_netsessionenum failed");
+
+               for (n=0; n < r.out.count; n++) {
+                       torture_assert(tctx,
+                               test_netsessiongetinfo_bysession(tctx, cli, r.out.info[n].info2.ComputerName),
+                               "failed to query sessioninfo");
+               }
+       }
+
+       return true;
+}
+
+
 bool torture_rap_scan(struct torture_context *torture, struct smbcli_state *cli)
 {
        int callno;
@@ -186,6 +244,8 @@ NTSTATUS torture_rap_init(void)
                                    test_netservergetinfo);
        torture_suite_add_1smb_test(suite_basic, "netsessionenum",
                                    test_netsessionenum);
+       torture_suite_add_1smb_test(suite_basic, "netsessiongetinfo",
+                                   test_netsessiongetinfo);
 
        torture_suite_add_1smb_test(suite, "scan", torture_rap_scan);