s4-smbtorture: Make test names lowercase and dot-separated.
[samba.git] / source4 / torture / smb2 / smb2.c
1 /* 
2    Unix SMB/CIFS implementation.
3    SMB torture tester
4    Copyright (C) Jelmer Vernooij 2006
5    
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10    
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15    
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "includes.h"
21 #include "libcli/smb2/smb2.h"
22
23 #include "torture/smbtorture.h"
24 #include "torture/smb2/proto.h"
25 #include "../lib/util/dlinklist.h"
26
27 static bool wrap_simple_1smb2_test(struct torture_context *torture_ctx,
28                                    struct torture_tcase *tcase,
29                                    struct torture_test *test)
30 {
31         bool (*fn) (struct torture_context *, struct smb2_tree *);
32         bool ret;
33
34         struct smb2_tree *tree1;
35
36         if (!torture_smb2_connection(torture_ctx, &tree1))
37                 return false;
38
39         fn = test->fn;
40
41         ret = fn(torture_ctx, tree1);
42
43         talloc_free(tree1);
44
45         return ret;
46 }
47
48 struct torture_test *torture_suite_add_1smb2_test(struct torture_suite *suite,
49                                                   const char *name,
50                                                   bool (*run)(struct torture_context *,
51                                                               struct smb2_tree *))
52 {
53         struct torture_test *test; 
54         struct torture_tcase *tcase;
55         
56         tcase = torture_suite_add_tcase(suite, name);
57
58         test = talloc(tcase, struct torture_test);
59
60         test->name = talloc_strdup(test, name);
61         test->description = NULL;
62         test->run = wrap_simple_1smb2_test;
63         test->fn = run;
64         test->dangerous = false;
65
66         DLIST_ADD_END(tcase->tests, test, struct torture_test *);
67
68         return test;
69 }
70
71
72 static bool wrap_simple_2smb2_test(struct torture_context *torture_ctx,
73                                    struct torture_tcase *tcase,
74                                    struct torture_test *test)
75 {
76         bool (*fn) (struct torture_context *, struct smb2_tree *, struct smb2_tree *);
77         bool ret;
78
79         struct smb2_tree *tree1;
80         struct smb2_tree *tree2;
81         TALLOC_CTX *mem_ctx = talloc_new(torture_ctx);
82
83         if (!torture_smb2_connection(torture_ctx, &tree1) ||
84             !torture_smb2_connection(torture_ctx, &tree2)) {
85                 return false;
86         }
87
88         talloc_steal(mem_ctx, tree1);
89         talloc_steal(mem_ctx, tree2);
90
91         fn = test->fn;
92
93         ret = fn(torture_ctx, tree1, tree2);
94
95         /* the test may already closed some of the connections */
96         talloc_free(mem_ctx);
97
98         return ret;
99 }
100
101
102 struct torture_test *torture_suite_add_2smb2_test(struct torture_suite *suite,
103                                                   const char *name,
104                                                   bool (*run)(struct torture_context *,
105                                                               struct smb2_tree *,
106                                                               struct smb2_tree *))
107 {
108         struct torture_test *test;
109         struct torture_tcase *tcase;
110
111         tcase = torture_suite_add_tcase(suite, name);
112
113         test = talloc(tcase, struct torture_test);
114
115         test->name = talloc_strdup(test, name);
116         test->description = NULL;
117         test->run = wrap_simple_2smb2_test;
118         test->fn = run;
119         test->dangerous = false;
120
121         DLIST_ADD_END(tcase->tests, test, struct torture_test *);
122
123         return test;
124 }
125
126 NTSTATUS torture_smb2_init(void)
127 {
128         struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "smb2");
129         torture_suite_add_simple_test(suite, "connect", torture_smb2_connect);
130         torture_suite_add_simple_test(suite, "scan", torture_smb2_scan);
131         torture_suite_add_simple_test(suite, "scangetinfo", torture_smb2_getinfo_scan);
132         torture_suite_add_simple_test(suite, "scansetinfo", torture_smb2_setinfo_scan);
133         torture_suite_add_simple_test(suite, "scanfind", torture_smb2_find_scan);
134         torture_suite_add_simple_test(suite, "getinfo", torture_smb2_getinfo);
135         torture_suite_add_simple_test(suite, "setinfo", torture_smb2_setinfo);
136         torture_suite_add_suite(suite, torture_smb2_lock_init());
137         torture_suite_add_suite(suite, torture_smb2_read_init());
138         torture_suite_add_suite(suite, torture_smb2_create_init());
139         torture_suite_add_suite(suite, torture_smb2_acls_init());
140         torture_suite_add_suite(suite, torture_smb2_notify_init());
141         torture_suite_add_suite(suite, torture_smb2_durable_open_init());
142         torture_suite_add_suite(suite, torture_smb2_dir_init());
143         torture_suite_add_suite(suite, torture_smb2_lease_init());
144         torture_suite_add_suite(suite, torture_smb2_compound_init());
145         torture_suite_add_suite(suite, torture_smb2_oplocks_init());
146         torture_suite_add_suite(suite, torture_smb2_streams_init());
147         torture_suite_add_1smb2_test(suite, "bench-oplock", test_smb2_bench_oplock);
148         torture_suite_add_1smb2_test(suite, "hold-oplock", test_smb2_hold_oplock);
149
150         suite->description = talloc_strdup(suite, "SMB2-specific tests");
151
152         torture_register_suite(suite);
153
154         return NT_STATUS_OK;
155 }