LCOV - code coverage report
Current view: top level - source4/torture/smb2 - smb2.c (source / functions) Hit Total Coverage
Test: coverage report for master 6248eab5 Lines: 102 105 97.1 %
Date: 2021-08-25 13:27:56 Functions: 5 5 100.0 %

          Line data    Source code
       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        2636 : 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             :         struct smb2_tree *tree1;
      34        2636 :         TALLOC_CTX *mem_ctx = talloc_new(torture_ctx);
      35             : 
      36        2636 :         if (!torture_smb2_connection(torture_ctx, &tree1)) {
      37           0 :                 torture_fail(torture_ctx,
      38             :                             "Establishing SMB2 connection failed\n");
      39             :                 return false;
      40             :         }
      41             : 
      42             :         /*
      43             :          * This is a trick:
      44             :          * The test might close the connection. If we steal the tree context
      45             :          * before that and free the parent instead of tree directly, we avoid
      46             :          * a double free error.
      47             :          */
      48        2636 :         talloc_steal(mem_ctx, tree1);
      49             : 
      50        2636 :         fn = test->fn;
      51             : 
      52        2636 :         ret = fn(torture_ctx, tree1);
      53             : 
      54        2636 :         talloc_free(mem_ctx);
      55             : 
      56        2636 :         return ret;
      57             : }
      58             : 
      59     1054144 : struct torture_test *torture_suite_add_1smb2_test(struct torture_suite *suite,
      60             :                                                   const char *name,
      61             :                                                   bool (*run)(struct torture_context *,
      62             :                                                               struct smb2_tree *))
      63             : {
      64             :         struct torture_test *test;
      65             :         struct torture_tcase *tcase;
      66             : 
      67     1054144 :         tcase = torture_suite_add_tcase(suite, name);
      68             : 
      69     1054144 :         test = talloc(tcase, struct torture_test);
      70             : 
      71     1054144 :         test->name = talloc_strdup(test, name);
      72     1054144 :         test->description = NULL;
      73     1054144 :         test->run = wrap_simple_1smb2_test;
      74     1054144 :         test->fn = run;
      75     1054144 :         test->dangerous = false;
      76             : 
      77     1054144 :         DLIST_ADD_END(tcase->tests, test);
      78             : 
      79     1054144 :         return test;
      80             : }
      81             : 
      82             : 
      83         390 : static bool wrap_simple_2smb2_test(struct torture_context *torture_ctx,
      84             :                                    struct torture_tcase *tcase,
      85             :                                    struct torture_test *test)
      86             : {
      87             :         bool (*fn) (struct torture_context *, struct smb2_tree *, struct smb2_tree *);
      88         390 :         bool ret = false;
      89             : 
      90             :         struct smb2_tree *tree1;
      91             :         struct smb2_tree *tree2;
      92         390 :         TALLOC_CTX *mem_ctx = talloc_new(torture_ctx);
      93             : 
      94         390 :         if (!torture_smb2_connection(torture_ctx, &tree1)) {
      95           0 :                 torture_fail(torture_ctx,
      96             :                     "Establishing SMB2 connection failed\n");
      97             :                 goto done;
      98             :         }
      99             : 
     100         390 :         talloc_steal(mem_ctx, tree1);
     101             : 
     102         390 :         if (!torture_smb2_connection(torture_ctx, &tree2)) {
     103           0 :                 torture_fail(torture_ctx,
     104             :                     "Establishing SMB2 connection failed\n");
     105             :                 goto done;
     106             :         }
     107             : 
     108         390 :         talloc_steal(mem_ctx, tree2);
     109             : 
     110         390 :         fn = test->fn;
     111             : 
     112         390 :         ret = fn(torture_ctx, tree1, tree2);
     113             : 
     114         390 : done:
     115             :         /* the test may already have closed some of the connections */
     116         390 :         talloc_free(mem_ctx);
     117             : 
     118         390 :         return ret;
     119             : }
     120             : 
     121             : 
     122      237653 : struct torture_test *torture_suite_add_2smb2_test(struct torture_suite *suite,
     123             :                                                   const char *name,
     124             :                                                   bool (*run)(struct torture_context *,
     125             :                                                               struct smb2_tree *,
     126             :                                                               struct smb2_tree *))
     127             : {
     128             :         struct torture_test *test;
     129             :         struct torture_tcase *tcase;
     130             : 
     131      237653 :         tcase = torture_suite_add_tcase(suite, name);
     132             : 
     133      237653 :         test = talloc(tcase, struct torture_test);
     134             : 
     135      237653 :         test->name = talloc_strdup(test, name);
     136      237653 :         test->description = NULL;
     137      237653 :         test->run = wrap_simple_2smb2_test;
     138      237653 :         test->fn = run;
     139      237653 :         test->dangerous = false;
     140             : 
     141      237653 :         DLIST_ADD_END(tcase->tests, test);
     142             : 
     143      237653 :         return test;
     144             : }
     145             : 
     146        2353 : NTSTATUS torture_smb2_init(TALLOC_CTX *ctx)
     147             : {
     148        2353 :         struct torture_suite *suite = torture_suite_create(ctx, "smb2");
     149        2353 :         torture_suite_add_simple_test(suite, "connect", torture_smb2_connect);
     150        2353 :         torture_suite_add_suite(suite, torture_smb2_scan_init(suite));
     151        2353 :         torture_suite_add_suite(suite, torture_smb2_getinfo_init(suite));
     152        2353 :         torture_suite_add_simple_test(suite, "setinfo", torture_smb2_setinfo);
     153        2353 :         torture_suite_add_suite(suite, torture_smb2_lock_init(suite));
     154        2353 :         torture_suite_add_suite(suite, torture_smb2_read_init(suite));
     155        2353 :         torture_suite_add_suite(suite, torture_smb2_aio_delay_init(suite));
     156        2353 :         torture_suite_add_suite(suite, torture_smb2_create_init(suite));
     157        2353 :         torture_suite_add_suite(suite, torture_smb2_twrp_init(suite));
     158        2353 :         torture_suite_add_suite(suite, torture_smb2_fileid_init(suite));
     159        2353 :         torture_suite_add_suite(suite, torture_smb2_acls_init(suite));
     160        2353 :         torture_suite_add_suite(suite, torture_smb2_acls_non_canonical_init(suite));
     161        2353 :         torture_suite_add_suite(suite, torture_smb2_notify_init(suite));
     162        2353 :         torture_suite_add_suite(suite, torture_smb2_notify_inotify_init(suite));
     163        2353 :         torture_suite_add_suite(suite,
     164             :                 torture_smb2_notify_disabled_init(suite));
     165        2353 :         torture_suite_add_suite(suite, torture_smb2_durable_open_init(suite));
     166        2353 :         torture_suite_add_suite(suite,
     167             :                 torture_smb2_durable_open_disconnect_init(suite));
     168        2353 :         torture_suite_add_suite(suite,
     169             :                 torture_smb2_durable_v2_open_init(suite));
     170        2353 :         torture_suite_add_suite(suite,
     171             :                 torture_smb2_durable_v2_delay_init(suite));
     172        2353 :         torture_suite_add_suite(suite, torture_smb2_dir_init(suite));
     173        2353 :         torture_suite_add_suite(suite, torture_smb2_lease_init(suite));
     174        2353 :         torture_suite_add_suite(suite, torture_smb2_compound_init(suite));
     175        2353 :         torture_suite_add_suite(suite, torture_smb2_compound_find_init(suite));
     176        2353 :         torture_suite_add_suite(suite, torture_smb2_oplocks_init(suite));
     177        2353 :         torture_suite_add_suite(suite, torture_smb2_kernel_oplocks_init(suite));
     178        2353 :         torture_suite_add_suite(suite, torture_smb2_streams_init(suite));
     179        2353 :         torture_suite_add_suite(suite, torture_smb2_ioctl_init(suite));
     180        2353 :         torture_suite_add_simple_test(suite, "set-sparse-ioctl",
     181             :                                       test_ioctl_set_sparse);
     182        2353 :         torture_suite_add_simple_test(suite, "zero-data-ioctl",
     183             :                                       test_ioctl_zero_data);
     184        2353 :         torture_suite_add_suite(suite, torture_smb2_rename_init(suite));
     185        2353 :         torture_suite_add_1smb2_test(suite, "bench-oplock", test_smb2_bench_oplock);
     186        2353 :         torture_suite_add_suite(suite, torture_smb2_sharemode_init(suite));
     187        2353 :         torture_suite_add_1smb2_test(suite, "hold-oplock", test_smb2_hold_oplock);
     188        2353 :         torture_suite_add_suite(suite, torture_smb2_session_init(suite));
     189        2353 :         torture_suite_add_suite(suite, torture_smb2_replay_init(suite));
     190        2353 :         torture_suite_add_simple_test(suite, "dosmode", torture_smb2_dosmode);
     191        2353 :         torture_suite_add_simple_test(suite, "maxfid", torture_smb2_maxfid);
     192        2353 :         torture_suite_add_simple_test(suite, "hold-sharemode",
     193             :                                       torture_smb2_hold_sharemode);
     194        2353 :         torture_suite_add_simple_test(suite, "check-sharemode",
     195             :                                       torture_smb2_check_sharemode);
     196        2353 :         torture_suite_add_suite(suite, torture_smb2_crediting_init(suite));
     197             : 
     198        2353 :         torture_suite_add_suite(suite, torture_smb2_doc_init(suite));
     199        2353 :         torture_suite_add_suite(suite, torture_smb2_multichannel_init(suite));
     200        2353 :         torture_suite_add_suite(suite, torture_smb2_samba3misc_init(suite));
     201        2353 :         torture_suite_add_suite(suite, torture_smb2_timestamps_init(suite));
     202        2353 :         torture_suite_add_suite(suite, torture_smb2_timestamp_resolution_init(suite));
     203        2353 :         torture_suite_add_1smb2_test(suite, "openattr", torture_smb2_openattrtest);
     204        2353 :         torture_suite_add_1smb2_test(suite, "winattr", torture_smb2_winattrtest);
     205        2353 :         torture_suite_add_1smb2_test(suite, "sdread", torture_smb2_sdreadtest);
     206        2353 :         torture_suite_add_suite(suite, torture_smb2_readwrite_init(suite));
     207        2353 :         torture_suite_add_1smb2_test(suite, "maximum_allowed", torture_smb2_maximum_allowed);
     208        2353 :         torture_suite_add_1smb2_test(suite, "mangle", torture_smb2_mangle);
     209        2353 :         torture_suite_add_1smb2_test(suite, "tcon", run_tcon_test);
     210        2353 :         torture_suite_add_1smb2_test(suite, "mkdir", torture_smb2_mkdir);
     211             : 
     212        2353 :         torture_suite_add_suite(suite, torture_smb2_charset(suite));
     213        2353 :         torture_suite_add_1smb2_test(suite, "secleak", torture_smb2_sec_leak);
     214        2353 :         torture_suite_add_1smb2_test(suite, "session-id", run_sessidtest);
     215        2353 :         torture_suite_add_suite(suite, torture_smb2_deny_init(suite));
     216             : 
     217        2353 :         suite->description = talloc_strdup(suite, "SMB2-specific tests");
     218             : 
     219        2353 :         torture_register_suite(ctx, suite);
     220             : 
     221        2353 :         return NT_STATUS_OK;
     222             : }

Generated by: LCOV version 1.13