2 This file is part of GNUnet.
3 Copyright (C) 2010-2015 GNUnet e.V.
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
19 * @file ats/test_ats2_lib.c
20 * @brief test ATS library with a generic interpreter for running ATS tests
21 * @author Julius Bünger
24 #include "gnunet_util_lib.h"
25 #include "gnunet_ats_application_service.h"
26 #include "gnunet_ats_transport_service.h"
27 #include "gnunet_testing_lib.h"
30 * @brief Indicates the success of the whole test
35 * @brief The time available until the test shuts down
37 static struct GNUNET_TIME_Relative timeout;
40 * @brief ATS Application Handle
42 * Handle to the application-side of ATS.
44 static struct GNUNET_ATS_ApplicationHandle *ah;
47 * @brief ATS Transport Handle
49 * Handle to the transport-side of ATS.
51 static struct GNUNET_ATS_TransportHandle *th;
54 * @brief Another (dummy) peer.
56 * Used as the peer ATS shall allocate bandwidth to.
58 static struct GNUNET_PeerIdentity other_peer;
61 * @brief Handle to the session record
63 static struct GNUNET_ATS_SessionRecord *sr;
67 * @brief Called whenever allocation changed
69 * Implements #GNUNET_ATS_AllocationCallback
73 * @param bandwidth_out
79 allocation_cb (void *cls,
80 struct GNUNET_ATS_Session *session,
81 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_out,
82 struct GNUNET_BANDWIDTH_Value32NBO bandwidth_in)
84 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
85 "allocation_cb() called\n");
90 * @brief Called whenever suggestion is made
92 * Implements #GNUNET_ATS_SuggestionCallback
99 suggestion_cb (void *cls,
100 const struct GNUNET_PeerIdentity *pid,
103 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
104 "suggestion_cb() called\n");
110 * @brief Initialise both 'sides' of ATS
112 * Initialises the application and transportation side of ATS.
115 init_both (const struct GNUNET_CONFIGURATION_Handle *cfg)
117 ah = GNUNET_ATS_application_init (cfg);
118 GNUNET_assert (NULL != ah);
119 th = GNUNET_ATS_transport_init (cfg,
124 GNUNET_assert (NULL != ah);
129 * @brief Disconnect both 'sides' of ATS
134 GNUNET_ATS_application_done (ah);
136 GNUNET_ATS_transport_done (th);
142 * @brief Provide information about the start of an imaginary connection
145 provide_info_start (void)
147 struct GNUNET_ATS_Properties prop =
149 .delay = GNUNET_TIME_UNIT_FOREVER_REL,
150 .goodput_out = 1048576,
151 .goodput_in = 1048576,
152 .utilization_out = 0,
156 .nt = GNUNET_NT_UNSPECIFIED,
157 .cc = GNUNET_TRANSPORT_CC_UNKNOWN,
160 sr = GNUNET_ATS_session_add (th,
165 GNUNET_assert (NULL != sr);
170 * @brief Provide information about the end of an imaginary connection
173 provide_info_end (void)
175 GNUNET_ATS_session_del (sr);
180 * @brief Inform ATS about the need of a connection towards a peer
183 get_suggestion (void)
185 struct GNUNET_ATS_ApplicationSuggestHandle *ash;
187 ash = GNUNET_ATS_application_suggest (ah,
189 GNUNET_MQ_PREFERENCE_NONE,
190 GNUNET_BANDWIDTH_VALUE_MAX);
191 GNUNET_assert (NULL != ash);
196 on_shutdown (void *cls)
200 GNUNET_SCHEDULER_shutdown ();
205 * Function run once the ATS service has been started.
208 * @param cfg configuration for the testcase
209 * @param peer handle to the peer
213 const struct GNUNET_CONFIGURATION_Handle *cfg,
214 struct GNUNET_TESTING_Peer *peer)
217 provide_info_start ();
219 (void) GNUNET_SCHEDULER_add_delayed (timeout,
226 * @brief Starts the gnunet-testing peer
238 memset (&other_peer, 0, sizeof (struct GNUNET_PeerIdentity));
239 timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS,
241 if (0 != GNUNET_TESTING_peer_run ("test-ats2-lib",
242 "test_ats2_lib.conf",
245 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
246 "Running the testing peer failed.\n");
251 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
252 "Global status indicates unsuccessful testrun - probably allocation_cb was not called.\n");
253 ret = 77; // SKIP test, test not yet right!
260 /* end of test_ats2_lib.c */