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 */
|