DOCUMENTATION

For the complete documentation, please refer to the osmo-gsm-manuals:
http://git.osmocom.org/osmo-gsm-manuals/
http://jenkins.osmocom.org/jenkins/job/Osmocom_Manuals/ws/


INSTALLATION

So far the osmo-gsm-tester directory is manually placed in /usr/local/src


DEPENDENCIES

Packages required to run the osmo-gsm-tester:

  apt-get install \
  dbus \
  tcpdump \
  python3 \
  python3-yaml \
  python3-mako \
  python3-gi \
  ofono \
  python3-pip
  pip3 install git+git://github.com/podshumok/python-smpplib.git
  pip3 install pydbus

To build ofono:
  apt-get install libglib2.0-dev \
		  libdbus-1-dev \
		  libudev-dev \
		  mobile-broadband-provider-info


INSTALLATION

Place a copy of the osmo-gsm-tester repository in /usr/local/src/

  cp install/osmo-gsm-tester-limits.conf /etc/security/limits.d/
  cp install/*.service /lib/systemd/system/
  cp install/org.ofono.conf /etc/dbus-1/system.d/
  systemctl daemon-reload

To run:

  systemctl enable ofono
  systemctl start ofono
  systemctl status ofono

  systemctl enable osmo-gsm-tester
  systemctl start osmo-gsm-tester
  systemctl status osmo-gsm-tester


To stop:

  systemctl stop osmo-gsm-tester

After ofonod has been started and modems have been connected to the system,
you can run the 'list-modems' script located in /usr/local/src/ofono/test to get
a list of the modems that have been detected by ofono.


CONFIGURATION

Host System configuration

Create the /var/tmp/osmo-gsm-tester directory. It will be used to accept new test jobs.

Test resources (NITB, BTS and modems) are currently configured in the test_manager.py.

For every nitb resource that can be allocated, one alias IP address needs
to be set up in /etc/network/interfaces on the interface that is connected to the BTSes.
By add the following lines for each nitb instance that can be allocated (while making
sure each interface alias and IP is unique)

  auto eth1:0
  allow-hotplug eth1:0
  iface eth1:0 inet static
	address 10.42.42.2
	netmask 255.255.255.0

Also make sure, the user executing the tester is allowed to run tcpdump.  If
the user is not root, we have used the folloing line to get proper permissions:

  groupadd pcap
  addgroup <your-user-name> pcap
  setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
  chgroup pcap /usr/sbin/tcpdump
  chmod 0750 /usr/sbin/tcpdump

The tester main unit must be able to ssh without password to the sysmobts (and
possibly other) hardware: place the main unit's public SSH key on the sysmoBTS.
Log in via SSH at least once to accept the BTS' host key.


Jenkins Configuration

(TODO: jenkins build slave details)

When adding an entry to jenkins' known_hosts file, be aware that you need to
add an actual RSA host key. Using 'ssh' to access the main unit may work, but
jenkins will still fail to access it in the absence of a full RSA host key:

  ssh-keyscan -H $my_main_unit_ip_addr >> ~jenkins/.ssh/known_hosts


LAUNCHING A TEST RUN

osmo-gsm-tester watches /var/tmp/osmo-gsm-tester for instructions to launch
test runs.  A test run is triggered by a subdirectory containing binaries and a
checksums file, typically created by jenkins using the scripts in contrib/.
