s4-testing: remove tcp port blocking from multichannel testing sp-multichannel-obnox-cleanup
authorSachin Prabhu <sprabhu@redhat.com>
Thu, 13 Sep 2018 12:14:07 +0000 (13:14 +0100)
committerMichael Adam <obnox@samba.org>
Tue, 18 Sep 2018 10:34:38 +0000 (12:34 +0200)
Remove dependencies on iptables for multichannel break handler testing.

Signed-off-by: Sachin Prabhu <sprabhu@redhat.com>
source4/torture/smb2/multichannel.c

index 039b7fc3aecbd946ee44f75d97af8e634fcf0218..9c9d20766e5404de19ae13369853bf51e3275104 100644 (file)
@@ -38,7 +38,6 @@
 #include "oplock_break_handler.h"
 #include "system/network.h"
 #include "lib/util/util_net.h"
-#include "torture/smb2/block.h"
 #include "lease_break_handler.h"
 
 #define BASEDIR "multichanneltestdir"
@@ -446,6 +445,22 @@ static void test_multichannel_init_smb_create(struct smb2_create *io)
        /* windows 2016 returns 300000 0x493E0 */
 }
 
+/*
+ * We simulate blocking incoming oplock break requests by simply ignoring
+ * the incoming break requests.
+ */
+static void test_set_ignore_break_handler(struct smb2_transport *transport)
+{
+       transport->oplock.handler = torture_oplock_ignore_handler;
+       transport->lease.handler = torture_lease_ignore_handler;
+}
+
+static void test_reset_break_handler(struct smb2_transport *transport)
+{
+       transport->oplock.handler = torture_oplock_ack_handler;
+       transport->lease.handler = torture_lease_handler;
+}
+
 /*
  * Oplock break - Test 1
  * open file1 in session 2A
@@ -679,8 +694,6 @@ static bool test_multichannel_oplock_break_test2(struct torture_context *tctx,
        struct smbcli_options transport2_options;
        struct smb2_session *session1 = tree1->session;
        uint16_t local_port = 0;
-       bool block_ok = false;
-       bool unblock_ok = false;
        DATA_BLOB blob;
 
        if (!test_multichannel_initial_checks(tctx, tree1))
@@ -763,9 +776,8 @@ static bool test_multichannel_oplock_break_test2(struct torture_context *tctx,
        transport2 = break_info.received_transport;
        torture_reset_break_info(tctx, &break_info);
 
-       /* block transport which is used by the server for oplock breaks */
-       block_ok = torture_block_tcp_transport(tctx, transport2);
-       torture_assert(tctx, block_ok, "we could not block tcp transport");
+       /* ignore incoming oplock/lease break handlers */
+       test_set_ignore_break_handler(transport2);
 
        torture_comment(tctx, "client1 opens fname2 via session 1\n");
        io2.in.oplock_level = smb2_util_oplock_level("b");
@@ -817,8 +829,8 @@ static bool test_multichannel_oplock_break_test2(struct torture_context *tctx,
        CHECK_CREATED(&io2, EXISTED, FILE_ATTRIBUTE_ARCHIVE);
        CHECK_VAL(io2.out.oplock_level, smb2_util_oplock_level("s"));
 
-       unblock_ok = torture_unblock_tcp_transport(tctx, transport2);
-       torture_assert(tctx, unblock_ok, "we could not unblock tcp transport");
+       /* reset incoming oplock/lease break handlers */
+       test_reset_break_handler(transport2);
 
        /* disconnect transport2 */
        /*
@@ -856,11 +868,6 @@ static bool test_multichannel_oplock_break_test2(struct torture_context *tctx,
        CHECK_VAL(break_info.count, 1);
 
 done:
-       if (block_ok && !unblock_ok) {
-               /* unblock tcp connection of transport2 */
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2);
-       }
-
        tree1->session = session1;
 
        smb2_util_close(tree1, h_client1_file1);
@@ -937,8 +944,6 @@ static bool test_multichannel_lease_break_test1(struct torture_context *tctx,
        struct smbcli_options transport2_options;
        struct smb2_session *session1 = tree1->session;
        uint16_t local_port = 0;
-       bool block_ok = false;
-       bool unblock_ok = false;
        struct smb2_lease ls1;
        struct smb2_lease ls2;
        struct smb2_lease ls3;
@@ -1090,13 +1095,6 @@ static bool test_multichannel_lease_break_test1(struct torture_context *tctx,
        test_multichannel_free_channels2(tree2A, tree2B, tree2C);
        tree2A = tree2B = tree2C = NULL;
 done:
-       if (block_ok && !unblock_ok) {
-               /* unblock tcp connection of transport2C */
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2C);
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2A);
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2B);
-       }
-
        tree1->session = session1;
 
        smb2_util_close(tree1, h_client1_file1);
@@ -1168,8 +1166,6 @@ static bool test_multichannel_lease_break_test2(struct torture_context *tctx,
        struct smbcli_options transport2_options;
        struct smb2_session *session1 = tree1->session;
        uint16_t local_port = 0;
-       bool block_ok = false;
-       bool unblock_ok = false;
        struct smb2_lease ls1;
        struct smb2_lease ls2;
        struct smb2_lease ls3;
@@ -1242,9 +1238,8 @@ static bool test_multichannel_lease_break_test2(struct torture_context *tctx,
 
        torture_comment(tctx, "Blocking 2B and 2C\n");
        /* Block 2B and 2C */
-       block_ok = torture_block_tcp_transport(tctx, transport2B);
-       block_ok |= torture_block_tcp_transport(tctx, transport2C);
-       torture_assert(tctx, block_ok, "we could not block tcp transport");
+       test_set_ignore_break_handler(transport2B);
+       test_set_ignore_break_handler(transport2C);
 
        /*
         * 1 opens file2
@@ -1265,10 +1260,8 @@ static bool test_multichannel_lease_break_test2(struct torture_context *tctx,
 
        /* Unblock 2B and 2C */
        torture_comment(tctx, "Unblocking 2B and 2C\n");
-       unblock_ok = torture_unblock_tcp_transport(tctx, transport2B);
-       unblock_ok |= torture_unblock_tcp_transport(tctx, transport2C);
-       torture_assert(tctx, unblock_ok, "we could not unblock tcp transport");
-       torture_unblock_cleanup(tctx);
+       test_reset_break_handler(transport2B);
+       test_reset_break_handler(transport2C);
 
        /* Will this trigger pending break? */
        smb2_keepalive(transport2B);
@@ -1313,12 +1306,6 @@ static bool test_multichannel_lease_break_test2(struct torture_context *tctx,
        tree2A = tree2B = tree2C = NULL;
 
 done:
-       if (block_ok && !unblock_ok) {
-               /* unblock tcp connection of transport2C */
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2C);
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2B);
-       }
-
        tree1->session = session1;
 
        smb2_util_close(tree1, h_client1_file1);
@@ -1395,8 +1382,6 @@ static bool test_multichannel_lease_break_test3(struct torture_context *tctx,
        struct smbcli_options transport2_options;
        struct smb2_session *session1 = tree1->session;
        uint16_t local_port = 0;
-       bool block_ok = false;
-       bool unblock_ok = false;
        struct smb2_lease ls1;
        struct smb2_lease ls2;
        struct smb2_lease ls3;
@@ -1501,8 +1486,7 @@ static bool test_multichannel_lease_break_test3(struct torture_context *tctx,
        torture_reset_lease_break_info(tctx, &lease_break_info);
 
        /* Block 2B */
-       block_ok = torture_block_tcp_transport(tctx, transport2B);
-       torture_assert(tctx, block_ok, "we could not block tcp transport");
+       test_set_ignore_break_handler(transport2B);
 
        /*
         * 1 opens file2
@@ -1533,8 +1517,7 @@ static bool test_multichannel_lease_break_test3(struct torture_context *tctx,
                "failed to write file2 via channel 2A");
 
        /* Unblock 2B */
-       unblock_ok = torture_unblock_tcp_transport(tctx, transport2B);
-       torture_assert(tctx, unblock_ok, "we could not unblock tcp transport");
+       test_reset_break_handler(transport2B);
 
        smb2_util_close(tree1, h_client1_file1);
        smb2_util_close(tree1, h_client1_file2);
@@ -1563,10 +1546,6 @@ static bool test_multichannel_lease_break_test3(struct torture_context *tctx,
        tree2A = tree2B = tree2C = NULL;
 
 done:
-       if (block_ok && !unblock_ok) {
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2B);
-       }
-
        tree1->session = session1;
 
        smb2_util_close(tree1, h_client1_file1);
@@ -1646,8 +1625,6 @@ static bool test_multichannel_lease_break_test4(struct torture_context *tctx,
        struct smbcli_options transport2_options;
        struct smb2_session *session1 = tree1->session;
        uint16_t local_port = 0;
-       bool block_ok = false;
-       bool unblock_ok = false;
        struct smb2_lease ls1;
        struct smb2_lease ls2;
        struct smb2_lease ls3;
@@ -1725,8 +1702,7 @@ static bool test_multichannel_lease_break_test4(struct torture_context *tctx,
 
        torture_comment(tctx, "Blocking 2A\n");
        /* Block 2A */
-       block_ok = torture_block_tcp_transport(tctx, transport2A);
-       torture_assert(tctx, block_ok, "we could not block tcp transport");
+       test_set_ignore_break_handler(transport2A);
 
        /*
         * 1 opens file2
@@ -1777,8 +1753,7 @@ static bool test_multichannel_lease_break_test4(struct torture_context *tctx,
 
        /* Unblock 2A */
        torture_comment(tctx, "Unblocking 2A\n");
-       unblock_ok = torture_unblock_tcp_transport(tctx, transport2A);
-       torture_assert(tctx, unblock_ok, "we could not unblock tcp transport");
+       test_reset_break_handler(transport2A);
 
        /*
         * 1 opens file1
@@ -1868,11 +1843,6 @@ static bool test_multichannel_lease_break_test4(struct torture_context *tctx,
        tree2A = tree2B = tree2C = NULL;
 
 done:
-       if (block_ok && !unblock_ok) {
-               unblock_ok = torture_unblock_tcp_transport(tctx, transport2A);
-       }
-       torture_unblock_cleanup(tctx);
-
        tree1->session = session1;
 
        smb2_util_close(tree1, h_client1_file1);