<p>Max has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/12556">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Add tests for transaction routines<br><br>Change-Id: I78dfb7cd35073a305cf668beda7d9d58d5a5a713<br>---<br>M configure.ac<br>M tests/Makefile.am<br>M tests/testsuite.at<br>A tests/trans/Makefile.am<br>A tests/trans/trans_test.c<br>A tests/trans/trans_test.err<br>A tests/trans/trans_test.ok<br>7 files changed, 242 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/56/12556/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/configure.ac b/configure.ac</span><br><span>index a4979cf..d955187 100644</span><br><span>--- a/configure.ac</span><br><span>+++ b/configure.ac</span><br><span>@@ -257,6 +257,7 @@</span><br><span> tests/Makefile</span><br><span> tests/atlocal</span><br><span> tests/smpp/Makefile</span><br><span style="color: hsl(120, 100%, 40%);">+ tests/trans/Makefile</span><br><span> tests/sms_queue/Makefile</span><br><span> tests/msc_vlr/Makefile</span><br><span> doc/Makefile</span><br><span>diff --git a/tests/Makefile.am b/tests/Makefile.am</span><br><span>index dc5194c..883df23 100644</span><br><span>--- a/tests/Makefile.am</span><br><span>+++ b/tests/Makefile.am</span><br><span>@@ -1,6 +1,7 @@</span><br><span> SUBDIRS = \</span><br><span> sms_queue \</span><br><span> msc_vlr \</span><br><span style="color: hsl(120, 100%, 40%);">+ trans \</span><br><span> $(NULL)</span><br><span> </span><br><span> if BUILD_SMPP</span><br><span>diff --git a/tests/testsuite.at b/tests/testsuite.at</span><br><span>index f27b60c..f3cb740 100644</span><br><span>--- a/tests/testsuite.at</span><br><span>+++ b/tests/testsuite.at</span><br><span>@@ -9,6 +9,13 @@</span><br><span> AT_CHECK([$abs_top_builddir/tests/smpp/smpp_test], [], [expout], [experr])</span><br><span> AT_CLEANUP</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+AT_SETUP([trans])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_KEYWORDS([trans])</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/trans/trans_test.ok > expout</span><br><span style="color: hsl(120, 100%, 40%);">+cat $abs_srcdir/trans/trans_test.err > experr</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CHECK([$abs_top_builddir/tests/trans/trans_test], [], [expout], [experr])</span><br><span style="color: hsl(120, 100%, 40%);">+AT_CLEANUP</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> AT_SETUP([sms_queue_test])</span><br><span> AT_KEYWORDS([sms_queue_test])</span><br><span> cat $abs_srcdir/sms_queue/sms_queue_test.ok > expout</span><br><span>diff --git a/tests/trans/Makefile.am b/tests/trans/Makefile.am</span><br><span>new file mode 100644</span><br><span>index 0000000..1a05307</span><br><span>--- /dev/null</span><br><span>+++ b/tests/trans/Makefile.am</span><br><span>@@ -0,0 +1,31 @@</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CPPFLAGS = \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(all_includes) \</span><br><span style="color: hsl(120, 100%, 40%);">+ -I$(top_srcdir)/include \</span><br><span style="color: hsl(120, 100%, 40%);">+ -I$(top_srcdir)/src/libmsc \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AM_CFLAGS = \</span><br><span style="color: hsl(120, 100%, 40%);">+ -Wall \</span><br><span style="color: hsl(120, 100%, 40%);">+ -ggdb3 \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOCORE_CFLAGS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOGSM_CFLAGS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOSCCP_CFLAGS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOABIS_CFLAGS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(COVERAGE_CFLAGS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(NULL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+AM_LDFLAGS = $(COVERAGE_LDFLAGS)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+EXTRA_DIST = trans_test.ok trans_test.err</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+trans_test_LDADD = \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(top_builddir)/src/libmsc/libmsc.a \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(top_builddir)/src/libvlr/libvlr.a \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOCORE_LIBS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOGSM_LIBS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOABIS_LIBS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOSIGTRAN_LIBS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOMGCPCLIENT_LIBS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(LIBOSMOGSUPCLIENT_LIBS) \</span><br><span style="color: hsl(120, 100%, 40%);">+ -ldbi \</span><br><span style="color: hsl(120, 100%, 40%);">+ $(NULL)</span><br><span>diff --git a/tests/trans/trans_test.c b/tests/trans/trans_test.c</span><br><span>new file mode 100644</span><br><span>index 0000000..42b39c6</span><br><span>--- /dev/null</span><br><span>+++ b/tests/trans/trans_test.c</span><br><span>@@ -0,0 +1,184 @@</span><br><span style="color: hsl(120, 100%, 40%);">+/*</span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2019 sysmocom s.f.m.c. GmbH <info@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+ * All Rights Reserved</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is free software; you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+ * it under the terms of the GNU Affero General Public License as published by</span><br><span style="color: hsl(120, 100%, 40%);">+ * the Free Software Foundation; either version 3 of the License, or</span><br><span style="color: hsl(120, 100%, 40%);">+ * (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span><br><span style="color: hsl(120, 100%, 40%);">+ * GNU Affero General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * You should have received a copy of the GNU Affero General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+ * along with this program. If not, see <http://www.gnu.org/licenses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdlib.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <stdio.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/msc/debug.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/msc/vlr.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/msc/msc_common.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/msc/transaction.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/application.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/backtrace.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static bool wrong_tran(const struct gsm_trans *t, uint8_t ref_id)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!t) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Failed to obtain transaction with expected ID %u.\n", ref_id);</span><br><span style="color: hsl(120, 100%, 40%);">+ return true;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (t->transaction_id != ref_id) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Wrong transaction obtained with ID %u != %u (expected)\n", t->transaction_id, ref_id);</span><br><span style="color: hsl(120, 100%, 40%);">+ return true;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return false;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct gsm_trans *make_tran(struct gsm_network *net, struct vlr_subscr *vsub, uint8_t proto, uint32_t callref)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ int trans_id = trans_assign_trans_id(net, vsub, proto, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trans_id < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Failed to get next transaction ID.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return trans_alloc(net, vsub, proto, trans_id, callref);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static struct ran_conn *make_conn(struct gsm_network *net, struct vlr_subscr *vsub)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ran_conn *ran_c = ran_conn_alloc(net, OSMO_RAT_UNKNOWN, 69);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (ran_c)</span><br><span style="color: hsl(120, 100%, 40%);">+ ran_c->vsub = vlr_subscr_get(vsub);</span><br><span style="color: hsl(120, 100%, 40%);">+ return ran_c;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void test_tran_single(struct gsm_network *net, struct vlr_subscr *vsub, uint32_t base_callref)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_trans *t, *x;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct ran_conn *ran_c;</span><br><span style="color: hsl(120, 100%, 40%);">+ uint8_t p = GSM48_PDISC_GROUP_CC;</span><br><span style="color: hsl(120, 100%, 40%);">+ int trans_id;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\nStarting basic transaction test...\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ran_c = make_conn(net, vsub);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!ran_c)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ t = make_tran(net, vsub, p, base_callref);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!t)</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Transaction allocation complete: 0x%X CallRef used.\n", t->callref);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trans_has_conn(ran_c))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ t->conn = ran_conn_get(ran_c, RAN_CONN_USE_SILENT_CALL);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!trans_has_conn(ran_c))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Connection %s assigned to transaction.\n", vlr_subscr_name(ran_c->vsub));</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ trans_id = trans_assign_trans_id(net, vsub, p, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trans_id < 0) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Failed to allocate next transaction id.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (trans_id == t->transaction_id) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Transaction id allocated twice.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Next transaction ID: %u\n", trans_id);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Transaction lookup:\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ x = trans_find_by_callref(net, base_callref);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (wrong_tran(x, t->transaction_id))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\tCallRef OK.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ x = trans_find_by_id(ran_c, p, t->transaction_id);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (wrong_tran(x, t->transaction_id))</span><br><span style="color: hsl(120, 100%, 40%);">+ return;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\tID OK.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Transaction cleanup.\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ trans_free(t);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Basic transaction test for CallRef 0x%X complete.\n", base_callref);</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+static void test_tran_overflow(struct gsm_network *net, struct vlr_subscr *vsub, uint32_t base_callref)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ unsigned i, max_t = 32, al;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_trans *t;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\nStarting overflow transaction test...\nAllocating: ");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i = 0; i < max_t; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ t = make_tran(net, vsub, GSM48_PDISC_BCAST_CC, base_callref);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!t)</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(".");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ al = i;</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\tAllocated %u transactions.\n Cleaning: ", al);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ for (i = 0; i < max_t; i++) {</span><br><span style="color: hsl(120, 100%, 40%);">+ t = trans_find_by_callref(net, base_callref);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!t)</span><br><span style="color: hsl(120, 100%, 40%);">+ break;</span><br><span style="color: hsl(120, 100%, 40%);">+ trans_free(t);</span><br><span style="color: hsl(120, 100%, 40%);">+ printf(".");</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("\n\tCleared %u transactions.\nOverflow transaction test for CallRef 0x%X complete: %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+ i, base_callref, (al != i) ? "FAILED" : "OK");</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+int main(int argc, char **argv)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+ void *ctx = talloc_named_const(NULL, 0, "trans_test");</span><br><span style="color: hsl(120, 100%, 40%);">+ struct gsm_network *net;</span><br><span style="color: hsl(120, 100%, 40%);">+ struct vlr_subscr *v;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_init_logging2(ctx, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ log_set_use_color(osmo_stderr_target, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+ log_set_print_filename(osmo_stderr_target, 0);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ net = gsm_network_init(ctx, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!net) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Failed to allocate network struct\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return 1;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ran_conn_init();</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ if (msc_vlr_alloc(net)) {</span><br><span style="color: hsl(120, 100%, 40%);">+ printf("Failed to allocate VLR\n");</span><br><span style="color: hsl(120, 100%, 40%);">+ return 2;</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ v = vlr_subscr_alloc(net->vlr);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ test_tran_single(net, v, 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ test_tran_overflow(net, v, 2);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ return EXIT_SUCCESS;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/tests/trans/trans_test.err b/tests/trans/trans_test.err</span><br><span>new file mode 100644</span><br><span>index 0000000..19cfbdb</span><br><span>--- /dev/null</span><br><span>+++ b/tests/trans/trans_test.err</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+unknown: Unknown RAN type, cannot tx release/clear</span><br><span>diff --git a/tests/trans/trans_test.ok b/tests/trans/trans_test.ok</span><br><span>new file mode 100644</span><br><span>index 0000000..20622bf</span><br><span>--- /dev/null</span><br><span>+++ b/tests/trans/trans_test.ok</span><br><span>@@ -0,0 +1,17 @@</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Starting basic transaction test...</span><br><span style="color: hsl(120, 100%, 40%);">+Transaction allocation complete: 0x1 CallRef used.</span><br><span style="color: hsl(120, 100%, 40%);">+Connection unknown assigned to transaction.</span><br><span style="color: hsl(120, 100%, 40%);">+Next transaction ID: 1</span><br><span style="color: hsl(120, 100%, 40%);">+Transaction lookup:</span><br><span style="color: hsl(120, 100%, 40%);">+ CallRef OK.</span><br><span style="color: hsl(120, 100%, 40%);">+ ID OK.</span><br><span style="color: hsl(120, 100%, 40%);">+Transaction cleanup.</span><br><span style="color: hsl(120, 100%, 40%);">+Basic transaction test for CallRef 0x1 complete.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Starting overflow transaction test...</span><br><span style="color: hsl(120, 100%, 40%);">+Allocating: .......Failed to get next transaction ID.</span><br><span style="color: hsl(120, 100%, 40%);">+ Allocated 7 transactions.</span><br><span style="color: hsl(120, 100%, 40%);">+ Cleaning: .......</span><br><span style="color: hsl(120, 100%, 40%);">+ Cleared 7 transactions.</span><br><span style="color: hsl(120, 100%, 40%);">+Overflow transaction test for CallRef 0x2 complete: OK</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/12556">change 12556</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/12556"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I78dfb7cd35073a305cf668beda7d9d58d5a5a713 </div>
<div style="display:none"> Gerrit-Change-Number: 12556 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Max <msuraev@sysmocom.de> </div>