Initial TTCN-3 test suite for osmo-remsim

This adds shared infrastructure and initial test suites for
osmo-remsim-{server,client,bankd}.

Change-Id: I00034d3a991f0f881cfd8ff0bfc4557113daf830
diff --git a/remsim/RSRES.ttcn b/remsim/RSRES.ttcn
new file mode 100644
index 0000000..a988b66
--- /dev/null
+++ b/remsim/RSRES.ttcn
@@ -0,0 +1,110 @@
+module RSRES {
+
+/* Implementation of the REmote Sim RESt (RSRES) JSON data types in TTCN-3.
+ * (C) 2019 by Harald Welte <laforge@gnumonks.org>
+ * All rights reserved.
+ *
+ * Released under the terms of GNU General Public License, Version 2 or
+ * (at your option) any later version.
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ */
+
+import from RSPRO all;
+
+/* resembles "enum remsim_server_client_fsm_state" */
+type enumerated ConnectionState {
+	INIT,
+	ESTABLISHED,
+	CONNECTED_CLIENT,
+	CONNECTED_BANKD
+};
+
+type record JsBank {
+	charstring		peer,
+	ConnectionState		state,
+	ComponentIdentity	component_id,
+	BankId			bankId,
+	SlotNumber		numberOfSlots
+};
+type record of JsBank JsBanks;
+
+template JsBank tr_JsBank(template ConnectionState state,
+			  template ComponentIdentity comp_id,
+			  template BankId bank_id,
+			  template SlotNumber num_of_slots) := {
+	peer := ?,
+	state := state,
+	component_id := comp_id,
+	bankId := bank_id,
+	numberOfSlots := num_of_slots
+}
+
+type record JsClient {
+	charstring		peer,
+	ConnectionState		state,
+	ComponentIdentity	component_id
+};
+type record of JsClient JsClients;
+
+template JsClient tr_JsClient(template ConnectionState state,
+			  template ComponentIdentity comp_id) := {
+	peer := ?,
+	state := state,
+	component_id := comp_id
+}
+
+/* resembles "enum slot_mapping_state" */
+type enumerated SlotmapState {
+	NEW,
+	UNACKNOWLEDGED,
+	ACTIVE,
+	DELETE_REQ,
+	DELETING
+};
+
+type record JsSlotmap {
+	BankSlot		bank,
+	ClientSlot		client,
+	SlotmapState		state optional
+};
+type record of JsSlotmap JsSlotmaps;
+
+template (value) JsSlotmap ts_JsSlotmap(template (value) BankSlot bslot,
+					template (value) ClientSlot cslot,
+					template (omit) SlotmapState state := omit) := {
+	bank := bslot,
+	client := cslot,
+	state := state
+}
+template JsSlotmap tr_JsSlotmap(template BankSlot bslot,
+				template ClientSlot cslot,
+				template SlotmapState state := ?) := {
+	bank := bslot,
+	client := cslot,
+	state := state
+}
+
+
+
+/* root JSON type expressing what remsim-server can return */
+type record JsRoot {
+	JsClients		clients optional,
+	JsBanks			banks optional,
+	JsSlotmaps		slotmaps optional
+};
+
+external function f_enc_JsRoot(in JsRoot inp) return octetstring
+	with { extension "prototype(convert) encode(JSON)" }
+external function f_dec_JsRoot(in octetstring inp) return JsRoot
+	with { extension "prototype(convert) decode(JSON)" }
+
+external function f_enc_JsSlotmap(in JsSlotmap inp) return octetstring
+	with { extension "prototype(convert) encode(JSON)" }
+external function f_dec_JsSlotmap(in octetstring inp) return JsSlotmap
+	with { extension "prototype(convert) decode(JSON)" }
+
+
+
+} with { encode "JSON" }