<p>pespin has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18661">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">WIP<br><br>Change-Id: Iff1a4dafcbf2193e95b1fb6e5a6712f1bcdd6309<br>---<br>A selftest/template_test/mytemplatedir/mytemplate.cfg.tmpl<br>A selftest/template_test/mytemplatedir/osmo-bsc.cfg.tmpl<br>D selftest/template_test/osmo-nitb.cfg.tmpl<br>M selftest/template_test/template_test.ok<br>M selftest/template_test/template_test.py<br>M src/osmo_gsm_tester/core/template.py<br>6 files changed, 214 insertions(+), 85 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-gsm-tester refs/changes/61/18661/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/selftest/template_test/mytemplatedir/mytemplate.cfg.tmpl b/selftest/template_test/mytemplatedir/mytemplate.cfg.tmpl</span><br><span>new file mode 100644</span><br><span>index 0000000..efafbca</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/template_test/mytemplatedir/mytemplate.cfg.tmpl</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+test-overlay-works-fine-only-available ${one.two.works}</span><br><span>diff --git a/selftest/template_test/mytemplatedir/osmo-bsc.cfg.tmpl b/selftest/template_test/mytemplatedir/osmo-bsc.cfg.tmpl</span><br><span>new file mode 100644</span><br><span>index 0000000..5c9400b</span><br><span>--- /dev/null</span><br><span>+++ b/selftest/template_test/mytemplatedir/osmo-bsc.cfg.tmpl</span><br><span>@@ -0,0 +1 @@</span><br><span style="color: hsl(120, 100%, 40%);">+test-overlay-works-fine ${foo.bar.works}</span><br><span>diff --git a/selftest/template_test/osmo-nitb.cfg.tmpl b/selftest/template_test/osmo-nitb.cfg.tmpl</span><br><span>deleted file mode 100644</span><br><span>index c0a5c46..0000000</span><br><span>--- a/selftest/template_test/osmo-nitb.cfg.tmpl</span><br><span>+++ /dev/null</span><br><span>@@ -1,82 +0,0 @@</span><br><span style="color: hsl(0, 100%, 40%);">-!</span><br><span style="color: hsl(0, 100%, 40%);">-! OpenBSC configuration saved from vty</span><br><span style="color: hsl(0, 100%, 40%);">-!</span><br><span style="color: hsl(0, 100%, 40%);">-password foo</span><br><span style="color: hsl(0, 100%, 40%);">-!</span><br><span style="color: hsl(0, 100%, 40%);">-log stderr</span><br><span style="color: hsl(0, 100%, 40%);">- logging filter all 1</span><br><span style="color: hsl(0, 100%, 40%);">- logging color 0</span><br><span style="color: hsl(0, 100%, 40%);">- logging print category 0</span><br><span style="color: hsl(0, 100%, 40%);">- logging print extended-timestamp 1</span><br><span style="color: hsl(0, 100%, 40%);">- logging level set-all debug</span><br><span style="color: hsl(0, 100%, 40%);">-!</span><br><span style="color: hsl(0, 100%, 40%);">-line vty</span><br><span style="color: hsl(0, 100%, 40%);">- no login</span><br><span style="color: hsl(0, 100%, 40%);">- bind ${vty_bind_ip}</span><br><span style="color: hsl(0, 100%, 40%);">-!</span><br><span style="color: hsl(0, 100%, 40%);">-e1_input</span><br><span style="color: hsl(0, 100%, 40%);">- e1_line 0 driver ipa</span><br><span style="color: hsl(0, 100%, 40%);">- ipa bind ${abis_bind_ip}</span><br><span style="color: hsl(0, 100%, 40%);">-network</span><br><span style="color: hsl(0, 100%, 40%);">- network country code ${mcc}</span><br><span style="color: hsl(0, 100%, 40%);">- mobile network code ${mnc}</span><br><span style="color: hsl(0, 100%, 40%);">- short name ${net_name_short}</span><br><span style="color: hsl(0, 100%, 40%);">- long name ${net_name_long}</span><br><span style="color: hsl(0, 100%, 40%);">- auth policy ${net_auth_policy}</span><br><span style="color: hsl(0, 100%, 40%);">- location updating reject cause 13</span><br><span style="color: hsl(0, 100%, 40%);">- encryption ${encryption}</span><br><span style="color: hsl(0, 100%, 40%);">- neci 1</span><br><span style="color: hsl(0, 100%, 40%);">- rrlp mode none</span><br><span style="color: hsl(0, 100%, 40%);">- mm info 1</span><br><span style="color: hsl(0, 100%, 40%);">- handover 0</span><br><span style="color: hsl(0, 100%, 40%);">- handover window rxlev averaging 10</span><br><span style="color: hsl(0, 100%, 40%);">- handover window rxqual averaging 1</span><br><span style="color: hsl(0, 100%, 40%);">- handover window rxlev neighbor averaging 10</span><br><span style="color: hsl(0, 100%, 40%);">- handover power budget interval 6</span><br><span style="color: hsl(0, 100%, 40%);">- handover power budget hysteresis 3</span><br><span style="color: hsl(0, 100%, 40%);">- handover maximum distance 9999</span><br><span style="color: hsl(0, 100%, 40%);">-smpp</span><br><span style="color: hsl(0, 100%, 40%);">- local-tcp-ip ${nitb.ip_address.addr} 2775</span><br><span style="color: hsl(0, 100%, 40%);">- system-id test-nitb</span><br><span style="color: hsl(0, 100%, 40%);">- policy ${smsc.policy}</span><br><span style="color: hsl(0, 100%, 40%);">- %for esme in esme_list:</span><br><span style="color: hsl(0, 100%, 40%);">-  esme ${esme.system_id}</span><br><span style="color: hsl(0, 100%, 40%);">- % if esme.password == '':</span><br><span style="color: hsl(0, 100%, 40%);">-   no password</span><br><span style="color: hsl(0, 100%, 40%);">- % else:</span><br><span style="color: hsl(0, 100%, 40%);">-   password ${esme.password}</span><br><span style="color: hsl(0, 100%, 40%);">- % endif</span><br><span style="color: hsl(0, 100%, 40%);">-   default-route</span><br><span style="color: hsl(0, 100%, 40%);">- %endfor</span><br><span style="color: hsl(0, 100%, 40%);">-ctrl</span><br><span style="color: hsl(0, 100%, 40%);">- bind ${ctrl_bind_ip}</span><br><span style="color: hsl(0, 100%, 40%);">-%for bts in bts_list:</span><br><span style="color: hsl(0, 100%, 40%);">- bts ${loop.index}</span><br><span style="color: hsl(0, 100%, 40%);">-  type ${bts.type}</span><br><span style="color: hsl(0, 100%, 40%);">-  band ${bts.band}</span><br><span style="color: hsl(0, 100%, 40%);">-  cell_identity ${bts.cell_identity}</span><br><span style="color: hsl(0, 100%, 40%);">-  location_area_code ${bts.location_area_code}</span><br><span style="color: hsl(0, 100%, 40%);">-  training_sequence_code 7</span><br><span style="color: hsl(0, 100%, 40%);">-  base_station_id_code ${bts.base_station_id_code}</span><br><span style="color: hsl(0, 100%, 40%);">-  ms max power 15</span><br><span style="color: hsl(0, 100%, 40%);">-  cell reselection hysteresis 4</span><br><span style="color: hsl(0, 100%, 40%);">-  rxlev access min 0</span><br><span style="color: hsl(0, 100%, 40%);">-  channel allocator ascending</span><br><span style="color: hsl(0, 100%, 40%);">-  rach tx integer 9</span><br><span style="color: hsl(0, 100%, 40%);">-  rach max transmission 7</span><br><span style="color: hsl(0, 100%, 40%);">-  ip.access unit_id ${bts.unit_id} 0</span><br><span style="color: hsl(0, 100%, 40%);">-  oml ip.access stream_id ${bts.stream_id} line 0</span><br><span style="color: hsl(0, 100%, 40%);">-  gprs mode none</span><br><span style="color: hsl(0, 100%, 40%);">-% for trx in bts.trx_list:</span><br><span style="color: hsl(0, 100%, 40%);">-  trx ${loop.index}</span><br><span style="color: hsl(0, 100%, 40%);">-   rf_locked 0</span><br><span style="color: hsl(0, 100%, 40%);">-   arfcn ${trx.arfcn}</span><br><span style="color: hsl(0, 100%, 40%);">-   nominal power 23</span><br><span style="color: hsl(0, 100%, 40%);">-   max_power_red ${trx.max_power_red}</span><br><span style="color: hsl(0, 100%, 40%);">-   rsl e1 tei 0</span><br><span style="color: hsl(0, 100%, 40%);">-%  for ts in trx.timeslot_list:</span><br><span style="color: hsl(0, 100%, 40%);">-   timeslot ${loop.index}</span><br><span style="color: hsl(0, 100%, 40%);">-    phys_chan_config ${ts.phys_chan_config}</span><br><span style="color: hsl(0, 100%, 40%);">-%  endfor</span><br><span style="color: hsl(0, 100%, 40%);">-% endfor</span><br><span style="color: hsl(0, 100%, 40%);">-%endfor</span><br><span>diff --git a/selftest/template_test/template_test.ok b/selftest/template_test/template_test.ok</span><br><span>index 88b77b0..718ef6e 100644</span><br><span>--- a/selftest/template_test/template_test.ok</span><br><span>+++ b/selftest/template_test/template_test.ok</span><br><span>@@ -191,3 +191,201 @@</span><br><span> - Testing: expect to fail on invalid templates dir</span><br><span> sucess: setting non-existing templates dir raised RuntimeError</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+- Testing: template directory overlay (still can find default one?)</span><br><span style="color: hsl(120, 100%, 40%);">+cnf Templates: DBG: rendering osmo-nitb.cfg.tmpl</span><br><span style="color: hsl(120, 100%, 40%);">+! Configuration rendered by osmo-gsm-tester</span><br><span style="color: hsl(120, 100%, 40%);">+password foo</span><br><span style="color: hsl(120, 100%, 40%);">+!</span><br><span style="color: hsl(120, 100%, 40%);">+log stderr</span><br><span style="color: hsl(120, 100%, 40%);">+ logging filter all 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging color 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print category 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging print extended-timestamp 1</span><br><span style="color: hsl(120, 100%, 40%);">+ logging level set-all debug</span><br><span style="color: hsl(120, 100%, 40%);">+!</span><br><span style="color: hsl(120, 100%, 40%);">+line vty</span><br><span style="color: hsl(120, 100%, 40%);">+ no login</span><br><span style="color: hsl(120, 100%, 40%);">+ bind val_ip_address</span><br><span style="color: hsl(120, 100%, 40%);">+!</span><br><span style="color: hsl(120, 100%, 40%);">+e1_input</span><br><span style="color: hsl(120, 100%, 40%);">+ e1_line 0 driver ipa</span><br><span style="color: hsl(120, 100%, 40%);">+ ipa bind val_ip_address</span><br><span style="color: hsl(120, 100%, 40%);">+network</span><br><span style="color: hsl(120, 100%, 40%);">+ network country code val_mcc</span><br><span style="color: hsl(120, 100%, 40%);">+ mobile network code val_mnc</span><br><span style="color: hsl(120, 100%, 40%);">+ short name val_short_name</span><br><span style="color: hsl(120, 100%, 40%);">+ long name val_long_name</span><br><span style="color: hsl(120, 100%, 40%);">+ auth policy val_auth_policy</span><br><span style="color: hsl(120, 100%, 40%);">+ location updating reject cause 13</span><br><span style="color: hsl(120, 100%, 40%);">+ encryption val_encryption</span><br><span style="color: hsl(120, 100%, 40%);">+ neci 1</span><br><span style="color: hsl(120, 100%, 40%);">+ rrlp mode none</span><br><span style="color: hsl(120, 100%, 40%);">+ mm info 1</span><br><span style="color: hsl(120, 100%, 40%);">+ handover 0</span><br><span style="color: hsl(120, 100%, 40%);">+ handover window rxlev averaging 10</span><br><span style="color: hsl(120, 100%, 40%);">+ handover window rxqual averaging 1</span><br><span style="color: hsl(120, 100%, 40%);">+ handover window rxlev neighbor averaging 10</span><br><span style="color: hsl(120, 100%, 40%);">+ handover power budget interval 6</span><br><span style="color: hsl(120, 100%, 40%);">+ handover power budget hysteresis 3</span><br><span style="color: hsl(120, 100%, 40%);">+ handover maximum distance 9999</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 0</span><br><span style="color: hsl(120, 100%, 40%);">+  type val_type_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  band val_band_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity val_bts.cell_identity_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code val_bts.location_area_code_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  training_sequence_code 7</span><br><span style="color: hsl(120, 100%, 40%);">+  base_station_id_code val_bts.base_station_id_code_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  ms max power 33</span><br><span style="color: hsl(120, 100%, 40%);">+  cell reselection hysteresis 4</span><br><span style="color: hsl(120, 100%, 40%);">+  rxlev access min 0</span><br><span style="color: hsl(120, 100%, 40%);">+  channel allocator ascending</span><br><span style="color: hsl(120, 100%, 40%);">+  rach tx integer 9</span><br><span style="color: hsl(120, 100%, 40%);">+  rach max transmission 7</span><br><span style="color: hsl(120, 100%, 40%);">+  ip.access unit_id val_bts.unit_id_bts0 0</span><br><span style="color: hsl(120, 100%, 40%);">+  oml ip.access stream_id val_bts.stream_id_bts0 line 0</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs mode gprs</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs routing area val_bts.routing_area_code_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs network-control-order nc1</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell bvci val_bts.bvci_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer blocking-timer 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer blocking-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer unblocking-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer reset-timer 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer reset-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer suspend-timer 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer suspend-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer resume-timer 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer resume-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer capability-update-timer 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer capability-update-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsei val_bts.bvci_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-block 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-block-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-reset 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-reset-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-test 30</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-alive 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-alive-retries 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 nsvci val_bts.bvci_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 local udp port 23020</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 remote udp port 23000</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 remote ip val_bts.sgsn_ip_addr_bts0</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 0</span><br><span style="color: hsl(120, 100%, 40%);">+   rf_locked 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn val_trx_arfcn_trx0</span><br><span style="color: hsl(120, 100%, 40%);">+   nominal power val_trx_nominal_power_trx0</span><br><span style="color: hsl(120, 100%, 40%);">+   max_power_red val_trx_max_power_red_trx0</span><br><span style="color: hsl(120, 100%, 40%);">+   rsl e1 tei 0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 0</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 1</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_1</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 2</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_2</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 3</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_3</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 1</span><br><span style="color: hsl(120, 100%, 40%);">+   rf_locked 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn val_trx_arfcn_trx1</span><br><span style="color: hsl(120, 100%, 40%);">+   nominal power val_trx_nominal_power_trx1</span><br><span style="color: hsl(120, 100%, 40%);">+   max_power_red val_trx_max_power_red_trx1</span><br><span style="color: hsl(120, 100%, 40%);">+   rsl e1 tei 0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 0</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 1</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_1</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 2</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_2</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 3</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_3</span><br><span style="color: hsl(120, 100%, 40%);">+ bts 1</span><br><span style="color: hsl(120, 100%, 40%);">+  type val_type_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  band val_band_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  cell_identity val_bts.cell_identity_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  location_area_code val_bts.location_area_code_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  training_sequence_code 7</span><br><span style="color: hsl(120, 100%, 40%);">+  base_station_id_code val_bts.base_station_id_code_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  ms max power 33</span><br><span style="color: hsl(120, 100%, 40%);">+  cell reselection hysteresis 4</span><br><span style="color: hsl(120, 100%, 40%);">+  rxlev access min 0</span><br><span style="color: hsl(120, 100%, 40%);">+  channel allocator ascending</span><br><span style="color: hsl(120, 100%, 40%);">+  rach tx integer 9</span><br><span style="color: hsl(120, 100%, 40%);">+  rach max transmission 7</span><br><span style="color: hsl(120, 100%, 40%);">+  ip.access unit_id val_bts.unit_id_bts1 0</span><br><span style="color: hsl(120, 100%, 40%);">+  oml ip.access stream_id val_bts.stream_id_bts1 line 0</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs mode gprs</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs routing area val_bts.routing_area_code_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs network-control-order nc1</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell bvci val_bts.bvci_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer blocking-timer 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer blocking-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer unblocking-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer reset-timer 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer reset-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer suspend-timer 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer suspend-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer resume-timer 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer resume-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer capability-update-timer 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs cell timer capability-update-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsei val_bts.bvci_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-block 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-block-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-reset 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-reset-retries 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-test 30</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-alive 3</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs ns timer tns-alive-retries 10</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 nsvci val_bts.bvci_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 local udp port 23020</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 remote udp port 23000</span><br><span style="color: hsl(120, 100%, 40%);">+  gprs nsvc 0 remote ip val_bts.sgsn_ip_addr_bts1</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 0</span><br><span style="color: hsl(120, 100%, 40%);">+   rf_locked 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn val_trx_arfcn_trx0</span><br><span style="color: hsl(120, 100%, 40%);">+   nominal power val_trx_nominal_power_trx0</span><br><span style="color: hsl(120, 100%, 40%);">+   max_power_red val_trx_max_power_red_trx0</span><br><span style="color: hsl(120, 100%, 40%);">+   rsl e1 tei 0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 0</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 1</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_1</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 2</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_2</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 3</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_3</span><br><span style="color: hsl(120, 100%, 40%);">+  trx 1</span><br><span style="color: hsl(120, 100%, 40%);">+   rf_locked 0</span><br><span style="color: hsl(120, 100%, 40%);">+   arfcn val_trx_arfcn_trx1</span><br><span style="color: hsl(120, 100%, 40%);">+   nominal power val_trx_nominal_power_trx1</span><br><span style="color: hsl(120, 100%, 40%);">+   max_power_red val_trx_max_power_red_trx1</span><br><span style="color: hsl(120, 100%, 40%);">+   rsl e1 tei 0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 0</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_0</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 1</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_1</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 2</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_2</span><br><span style="color: hsl(120, 100%, 40%);">+   timeslot 3</span><br><span style="color: hsl(120, 100%, 40%);">+    phys_chan_config val_phys_chan_config_3</span><br><span style="color: hsl(120, 100%, 40%);">+smpp</span><br><span style="color: hsl(120, 100%, 40%);">+ local-tcp-ip val_ip_address 2775</span><br><span style="color: hsl(120, 100%, 40%);">+ system-id test-nitb</span><br><span style="color: hsl(120, 100%, 40%);">+ policy val_smsc_policy</span><br><span style="color: hsl(120, 100%, 40%);">+ esme val_system_id_esme0</span><br><span style="color: hsl(120, 100%, 40%);">+  password val_password_esme0</span><br><span style="color: hsl(120, 100%, 40%);">+  default-route</span><br><span style="color: hsl(120, 100%, 40%);">+ esme val_system_id_esme1</span><br><span style="color: hsl(120, 100%, 40%);">+  no password</span><br><span style="color: hsl(120, 100%, 40%);">+  default-route</span><br><span style="color: hsl(120, 100%, 40%);">+ctrl</span><br><span style="color: hsl(120, 100%, 40%);">+ bind val_ip_address</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- Testing: template directory overlay (present in both dirs)</span><br><span style="color: hsl(120, 100%, 40%);">+cnf Templates: DBG: rendering osmo-bsc.cfg.tmpl</span><br><span style="color: hsl(120, 100%, 40%);">+test-overlay-works-fine yes</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+- Testing: template directory overlay (present only on overlay dir)</span><br><span style="color: hsl(120, 100%, 40%);">+cnf Templates: DBG: rendering mytemplate.cfg.tmpl</span><br><span style="color: hsl(120, 100%, 40%);">+test-overlay-works-fine-only-available yes</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>diff --git a/selftest/template_test/template_test.py b/selftest/template_test/template_test.py</span><br><span>index 747d508..52976e5 100755</span><br><span>--- a/selftest/template_test/template_test.py</span><br><span>+++ b/selftest/template_test/template_test.py</span><br><span>@@ -92,4 +92,13 @@</span><br><span>     print('sucess: setting non-existing templates dir raised RuntimeError\n')</span><br><span>     pass</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+mytemplatedir = os.path.join(os.path.dirname(__file__), 'mytemplatedir')</span><br><span style="color: hsl(120, 100%, 40%);">+template.set_templates_dir(mytemplatedir, template.default_templates_dir())</span><br><span style="color: hsl(120, 100%, 40%);">+print('- Testing: template directory overlay (still can find default one?)')</span><br><span style="color: hsl(120, 100%, 40%);">+print(template.render('osmo-nitb.cfg', vals))</span><br><span style="color: hsl(120, 100%, 40%);">+print('- Testing: template directory overlay (present in both dirs)')</span><br><span style="color: hsl(120, 100%, 40%);">+print(template.render('osmo-bsc.cfg', dict(foo=dict(bar=dict(works='yes')))))</span><br><span style="color: hsl(120, 100%, 40%);">+print('- Testing: template directory overlay (present only on overlay dir)')</span><br><span style="color: hsl(120, 100%, 40%);">+print(template.render('mytemplate.cfg', dict(one=dict(two=dict(works='yes')))))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> # vim: expandtab tabstop=4 shiftwidth=4</span><br><span>diff --git a/src/osmo_gsm_tester/core/template.py b/src/osmo_gsm_tester/core/template.py</span><br><span>index 2bf4fed..82985ef 100644</span><br><span>--- a/src/osmo_gsm_tester/core/template.py</span><br><span>+++ b/src/osmo_gsm_tester/core/template.py</span><br><span>@@ -27,12 +27,14 @@</span><br><span> _lookup = None</span><br><span> _logger = log.Origin(log.C_CNF, 'no templates dir set')</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+def default_templates_dir():</span><br><span style="color: hsl(120, 100%, 40%);">+    return os.path.join(os.path.dirname(os.path.dirname(__file__)), 'templates')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> def set_templates_dir(*templates_dirs):</span><br><span>     global _lookup</span><br><span>     global _logger</span><br><span>     if not templates_dirs:</span><br><span style="color: hsl(0, 100%, 40%);">-        # default templates dir is relative to this source file</span><br><span style="color: hsl(0, 100%, 40%);">-        templates_dirs = [os.path.join(os.path.dirname(os.path.dirname(__file__)), 'templates')]</span><br><span style="color: hsl(120, 100%, 40%);">+            raise RuntimeError('templates dir list is empty!')</span><br><span>     for d in templates_dirs:</span><br><span>         if not os.path.isdir(d):</span><br><span>             raise RuntimeError('templates dir is not a dir: %r'</span><br><span>@@ -45,7 +47,7 @@</span><br><span>        ".tmpl" is added to the name to look it up in the templates dir.'''</span><br><span>     global _lookup</span><br><span>     if _lookup is None:</span><br><span style="color: hsl(0, 100%, 40%);">-        set_templates_dir()</span><br><span style="color: hsl(120, 100%, 40%);">+        set_templates_dir(default_templates_dir())</span><br><span>     tmpl_name = name + '.tmpl'</span><br><span>     log.ctx(tmpl_name)</span><br><span>     template = _lookup.get_template(tmpl_name)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18661">change 18661</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/c/osmo-gsm-tester/+/18661"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: Iff1a4dafcbf2193e95b1fb6e5a6712f1bcdd6309 </div>
<div style="display:none"> Gerrit-Change-Number: 18661 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>