aboutsummaryrefslogtreecommitdiff
path: root/src/cadet/test_cadeT.c
blob: 5e92084a6f7def2e70da1a2d6dfa78b508d2c6e8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
/*
     This file is part of GNUnet.
     Copyright (C) 2009 GNUnet e.V.

     GNUnet is free software: you can redistribute it and/or modify it
     under the terms of the GNU Affero General Public License as published
     by the Free Software Foundation, either version 3 of the License,
     or (at your option) any later version.

     GNUnet is distributed in the hope that it will be useful, but
     WITHOUT ANY WARRANTY; without even the implied warranty of
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     Affero General Public License for more details.

     You should have received a copy of the GNU Affero General Public License
     along with this program.  If not, see <http://www.gnu.org/licenses/>.

     SPDX-License-Identifier: AGPL3.0-or-later
 */
/**
 * @file cadet/test_cadeT.c
 * @brief testcase for cadet.c
 * @author xrs
 *
 * Goal:
 *   - test session resumption after a hard channel breakup
 *
 * ToDos:
 *   x setup peer A
 *   x setup peer B
 *   x setup cadet on peer B listening on port "cadet_port"
 *   x create a channel from peer A to B
 *   x create method to find out KX initiator
 *   x send a message over channel
 *   x check if message was received
 *   - breakup the connection without the receiver receiving a channel destroy message
 *   - assert tunnel is down
 *   - resume channel (second handshake for tunnel)
 *   - send second message over channel
 *   - check if message was receveived
 *   - end test
 *
 * Questions:
 *   - can we simulate hard breakups with TESTBED?
 *     - GNUNET_TESTBED_underlay_configure_link not implemented
 *     - GNUNET_TESTBED_underlaylinkmodel_set_link not usable
 *     - GNUNET_TESTBED_peer_stop evokes standard service disconnect
 *     - GNUNET_TESTBED_peer_destroy and GNUNET_TESTBED_peer_create
 *   - how can we test the sublayers of CADET, e.g. connection, tunnel, channel?
 *
 * Development
 *   - red -> green -> refactor (cyclic)
 *   - be aware of Continuation Passing Style (CPS) programming
 */
#include "platform.h"
#include "gnunet_testbed_service.h"
#include "cadet.h"
#include <test_cadeT_util.h>

#define CONFIG            "test_cadet.conf"
#define TESTPROGAM_NAME   "test-cadet-channel-resumption"

/****************************** TEST LOGIC ********************************/

static int kx_initiator;

void 
handle_message (void *cls, 
                const struct GNUNET_MessageHeader *msg)
{
  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%s\n", __func__);
}

static void
send_message ()
{
  struct GNUNET_MQ_Envelope *envelope;
  struct GNUNET_MessageHeader *msg;

  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%s\n", __func__);

  envelope = GNUNET_MQ_msg (msg, 
                            GNUNET_MESSAGE_TYPE_DUMMY);

  GNUNET_MQ_send (GNUNET_CADET_get_mq (test_peers[0].channel), 
                  envelope);
}

/**
 * This function is called after all testbed management is done and the 
 * testbed peers are ready for the actual test logic.
 * Use struct test_peers[i] to control the peers.
 */
void
run_test ()
{
  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "%s\n", __func__);

  kx_initiator = (0 < GNUNET_memcmp (&test_peers[0].id, &test_peers[1].id)) ? 1 : 0;

  GNUNET_log (GNUNET_ERROR_TYPE_INFO, 
              "KX initiator is peer %s\n", 
              GNUNET_i2s (&test_peers[kx_initiator].id));

  send_message();
}


int 
main (int argc, char *argv[])
{
  GNUNET_TESTBED_test_run (TESTPROGAM_NAME,
                           CONFIG,
                           REQUESTED_PEERS, 0LL, NULL, NULL,
                           prepare_test, NULL);
  return test_result;
}

/* end of test_template_api.c */