initial import

The original osmo-gsm-tester was an internal development at sysmocom, mostly by
D. Laszlo Sitzer <dlsitzer@sysmocom.de>, of which this public osmo-gsm-tester
is a refactoring / rewrite.

This imports an early state of the refactoring and is not functional yet. Bits
from the earlier osmo-gsm-tester will be added as needed. The earlier commit
history is not imported.
diff --git a/test/suite_test/empty_dir/.unrelated_file b/test/suite_test/empty_dir/.unrelated_file
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/suite_test/empty_dir/.unrelated_file
diff --git a/test/suite_test/test_suite/hello_world.py b/test/suite_test/test_suite/hello_world.py
new file mode 100644
index 0000000..c992139
--- /dev/null
+++ b/test/suite_test/test_suite/hello_world.py
@@ -0,0 +1,3 @@
+print('hello world')
+print('I am %r / %r' % (this.suite, this.test))
+print('one\ntwo\nthree')
diff --git a/test/suite_test/test_suite/mo_mt_sms.py b/test/suite_test/test_suite/mo_mt_sms.py
new file mode 100644
index 0000000..cf44357
--- /dev/null
+++ b/test/suite_test/test_suite/mo_mt_sms.py
@@ -0,0 +1,18 @@
+nitb_iface = resources.nitb_iface()
+nitb = resources.nitb()
+bts = resources.bts()
+ms_mo = resources.modem()
+ms_mt = resources.modem()
+
+nitb.start(nitb_iface)
+bts.start(nitb)
+
+nitb.add_subscriber(ms_mo, resources.msisdn())
+nitb.add_subscriber(ms_mt, resources.msisdn())
+
+ms_mo.start()
+ms_mt.start()
+wait(nitb.subscriber_attached, ms_mo, ms_mt)
+
+sms = ms_mo.sms_send(ms_mt.msisdn)
+wait(nitb.sms_received, sms)
diff --git a/test/suite_test/test_suite/mo_sms.py b/test/suite_test/test_suite/mo_sms.py
new file mode 100644
index 0000000..d9517dd
--- /dev/null
+++ b/test/suite_test/test_suite/mo_sms.py
@@ -0,0 +1,20 @@
+nitb_iface = resources.nitb_iface()
+nitb = resources.nitb()
+bts = resources.bts()
+ms_ext = resources.msisdn()
+fake_ext = resources.msisdn()
+ms = resources.modem()
+
+nitb.configure(nitb_iface, bts)
+bts.configure(nitb)
+
+nitb.start()
+bts.start()
+
+nitb.add_fake_ext(fake_ext)
+nitb.add_subscriber(ms, ms_ext)
+
+ms.start()
+wait(nitb.subscriber_attached, ms)
+sms = ms.sms_send(fake_ext)
+wait(nitb.sms_received, sms)
diff --git a/test/suite_test/test_suite/suite.conf b/test/suite_test/test_suite/suite.conf
new file mode 100644
index 0000000..7596ca0
--- /dev/null
+++ b/test/suite_test/test_suite/suite.conf
@@ -0,0 +1,9 @@
+resources:
+  nitb_iface: 1
+  nitb: 1
+  bts: 1
+  msisdn: 2
+  modem: 2
+
+defaults:
+  timeout: 60s
diff --git a/test/suite_test/test_suite/test_error.py b/test/suite_test/test_suite/test_error.py
new file mode 100644
index 0000000..a45f7a6
--- /dev/null
+++ b/test/suite_test/test_suite/test_error.py
@@ -0,0 +1,2 @@
+print('I am %r' % this.test)
+assert(False)
diff --git a/test/suite_test/test_suite/test_error2.py b/test/suite_test/test_suite/test_error2.py
new file mode 100755
index 0000000..7e04588
--- /dev/null
+++ b/test/suite_test/test_suite/test_error2.py
@@ -0,0 +1,8 @@
+#!/usr/bin/env python3
+
+from osmo_gsm_tester import test
+from osmo_gsm_tester.test import resources
+
+print('I am %r / %r' % (test.suite.name(), test.test.name()))
+
+assert(False)