LCOV - code coverage report
Current view: top level - libcli/echo/tests - echo.c (source / functions) Hit Total Coverage
Test: coverage report for master 6248eab5 Lines: 24 26 92.3 %
Date: 2021-08-25 13:27:56 Functions: 3 3 100.0 %

          Line data    Source code
       1             : /*
       2             :    Unix SMB/CIFS implementation.
       3             : 
       4             :    Example echo torture tests
       5             : 
       6             :    Copyright (C) 2010 Kai Blin  <kai@samba.org>
       7             : 
       8             :    This program is free software; you can redistribute it and/or modify
       9             :    it under the terms of the GNU General Public License as published by
      10             :    the Free Software Foundation; either version 3 of the License, or
      11             :    (at your option) any later version.
      12             : 
      13             :    This program is distributed in the hope that it will be useful,
      14             :    but WITHOUT ANY WARRANTY; without even the implied warranty of
      15             :    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      16             :    GNU General Public License for more details.
      17             : 
      18             :    You should have received a copy of the GNU General Public License
      19             :    along with this program.  If not, see <http://www.gnu.org/licenses/>.
      20             : */
      21             : 
      22             : #include "includes.h"
      23             : #include "torture/smbtorture.h"
      24             : #include "libcli/resolve/resolve.h"
      25             : #include <tevent.h>
      26             : #include "libcli/util/ntstatus.h"
      27             : #include "libcli/echo/libecho.h"
      28             : 
      29             : NTSTATUS torture_libcli_echo_init(TALLOC_CTX *);
      30             : 
      31             : /* Basic test function that sends an echo request and checks the reply */
      32           1 : static bool echo_udp_basic(struct torture_context *tctx, const char *address)
      33             : {
      34             :         struct tevent_req *req;
      35             :         NTSTATUS status;
      36           1 :         const char *msg_send = "This is a test string\n";
      37             :         char *msg_recv;
      38             : 
      39           1 :         req = echo_request_send(tctx, tctx->ev, address, msg_send);
      40           1 :         torture_assert(tctx, req != NULL,
      41             :                        "echo_request_send returned non-null tevent_req");
      42             : 
      43           4 :         while(tevent_req_is_in_progress(req)) {
      44           2 :                 tevent_loop_once(tctx->ev);
      45             :         }
      46             : 
      47           1 :         status = echo_request_recv(req, tctx, &msg_recv);
      48           1 :         torture_assert_ntstatus_ok(tctx, status,
      49             :                                    "echo_request_recv returned ok");
      50             : 
      51           1 :         torture_assert_str_equal(tctx, msg_recv, msg_send,
      52             :                                  "Echo server echoed request string");
      53             : 
      54           1 :         return true;
      55             : }
      56             : 
      57             : /*Test case to set up the environment and perform UDP-based echo tests */
      58           1 : static bool torture_echo_udp(struct torture_context *tctx)
      59             : {
      60             :         const char *address;
      61             :         struct nbt_name name;
      62             :         NTSTATUS status;
      63           1 :         bool ret = true;
      64             : 
      65           1 :         make_nbt_name_server(&name,
      66             :                              torture_setting_string(tctx, "host", NULL));
      67           1 :         status = resolve_name_ex(lpcfg_resolve_context(tctx->lp_ctx),
      68             :                                  0, 0,
      69             :                                  &name, tctx,
      70             :                                  &address, tctx->ev);
      71           1 :         if (!NT_STATUS_IS_OK(status)) {
      72           0 :                 printf("Failed to resolve %s - %s\n", name.name,
      73             :                        nt_errstr(status));
      74           0 :                 return false;
      75             :         }
      76             : 
      77             :         /* All tests are now called here */
      78           1 :         ret &= echo_udp_basic(tctx, address);
      79             : 
      80           1 :         return ret;
      81             : }
      82             : 
      83             : /* Test suite that bundles all the libecho tests */
      84        2353 : NTSTATUS torture_libcli_echo_init(TALLOC_CTX *ctx)
      85             : {
      86             :         struct torture_suite *suite;
      87             : 
      88        2353 :         suite = torture_suite_create(ctx, "echo");
      89        2353 :         NT_STATUS_HAVE_NO_MEMORY(suite);
      90             : 
      91        2353 :         torture_suite_add_simple_test(suite, "udp", torture_echo_udp);
      92             : 
      93        2353 :         suite->description = talloc_strdup(suite, "libcli/echo interface tests");
      94        2353 :         torture_register_suite(ctx, suite);
      95             : 
      96        2353 :         return NT_STATUS_OK;
      97             : }

Generated by: LCOV version 1.13