selftest: template: Test existing overlay dir features

Change-Id: Iff1a4dafcbf2193e95b1fb6e5a6712f1bcdd6309
This commit is contained in:
Pau Espin 2020-06-04 17:23:23 +02:00
parent 315ba57651
commit 4ddcdaf62c
6 changed files with 214 additions and 85 deletions

View File

@ -0,0 +1 @@
test-overlay-works-fine-only-available ${one.two.works}

View File

@ -0,0 +1 @@
test-overlay-works-fine ${foo.bar.works}

View File

@ -1,82 +0,0 @@
!
! OpenBSC configuration saved from vty
!
password foo
!
log stderr
logging filter all 1
logging color 0
logging print category 0
logging print extended-timestamp 1
logging level set-all debug
!
line vty
no login
bind ${vty_bind_ip}
!
e1_input
e1_line 0 driver ipa
ipa bind ${abis_bind_ip}
network
network country code ${mcc}
mobile network code ${mnc}
short name ${net_name_short}
long name ${net_name_long}
auth policy ${net_auth_policy}
location updating reject cause 13
encryption ${encryption}
neci 1
rrlp mode none
mm info 1
handover 0
handover window rxlev averaging 10
handover window rxqual averaging 1
handover window rxlev neighbor averaging 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
smpp
local-tcp-ip ${nitb.ip_address.addr} 2775
system-id test-nitb
policy ${smsc.policy}
%for esme in esme_list:
esme ${esme.system_id}
% if esme.password == '':
no password
% else:
password ${esme.password}
% endif
default-route
%endfor
ctrl
bind ${ctrl_bind_ip}
%for bts in bts_list:
bts ${loop.index}
type ${bts.type}
band ${bts.band}
cell_identity ${bts.cell_identity}
location_area_code ${bts.location_area_code}
training_sequence_code 7
base_station_id_code ${bts.base_station_id_code}
ms max power 15
cell reselection hysteresis 4
rxlev access min 0
channel allocator ascending
rach tx integer 9
rach max transmission 7
ip.access unit_id ${bts.unit_id} 0
oml ip.access stream_id ${bts.stream_id} line 0
gprs mode none
% for trx in bts.trx_list:
trx ${loop.index}
rf_locked 0
arfcn ${trx.arfcn}
nominal power 23
max_power_red ${trx.max_power_red}
rsl e1 tei 0
% for ts in trx.timeslot_list:
timeslot ${loop.index}
phys_chan_config ${ts.phys_chan_config}
% endfor
% endfor
%endfor

View File

@ -191,3 +191,201 @@ ctrl
- Testing: expect to fail on invalid templates dir
sucess: setting non-existing templates dir raised RuntimeError
- Testing: template directory overlay (still can find default one?)
cnf Templates: DBG: rendering osmo-nitb.cfg.tmpl
! Configuration rendered by osmo-gsm-tester
password foo
!
log stderr
logging filter all 1
logging color 1
logging print category 1
logging print extended-timestamp 1
logging level set-all debug
!
line vty
no login
bind val_ip_address
!
e1_input
e1_line 0 driver ipa
ipa bind val_ip_address
network
network country code val_mcc
mobile network code val_mnc
short name val_short_name
long name val_long_name
auth policy val_auth_policy
location updating reject cause 13
encryption val_encryption
neci 1
rrlp mode none
mm info 1
handover 0
handover window rxlev averaging 10
handover window rxqual averaging 1
handover window rxlev neighbor averaging 10
handover power budget interval 6
handover power budget hysteresis 3
handover maximum distance 9999
bts 0
type val_type_bts0
band val_band_bts0
cell_identity val_bts.cell_identity_bts0
location_area_code val_bts.location_area_code_bts0
training_sequence_code 7
base_station_id_code val_bts.base_station_id_code_bts0
ms max power 33
cell reselection hysteresis 4
rxlev access min 0
channel allocator ascending
rach tx integer 9
rach max transmission 7
ip.access unit_id val_bts.unit_id_bts0 0
oml ip.access stream_id val_bts.stream_id_bts0 line 0
gprs mode gprs
gprs routing area val_bts.routing_area_code_bts0
gprs network-control-order nc1
gprs cell bvci val_bts.bvci_bts0
gprs cell timer blocking-timer 3
gprs cell timer blocking-retries 3
gprs cell timer unblocking-retries 3
gprs cell timer reset-timer 3
gprs cell timer reset-retries 3
gprs cell timer suspend-timer 10
gprs cell timer suspend-retries 3
gprs cell timer resume-timer 10
gprs cell timer resume-retries 3
gprs cell timer capability-update-timer 10
gprs cell timer capability-update-retries 3
gprs nsei val_bts.bvci_bts0
gprs ns timer tns-block 3
gprs ns timer tns-block-retries 3
gprs ns timer tns-reset 3
gprs ns timer tns-reset-retries 3
gprs ns timer tns-test 30
gprs ns timer tns-alive 3
gprs ns timer tns-alive-retries 10
gprs nsvc 0 nsvci val_bts.bvci_bts0
gprs nsvc 0 local udp port 23020
gprs nsvc 0 remote udp port 23000
gprs nsvc 0 remote ip val_bts.sgsn_ip_addr_bts0
trx 0
rf_locked 0
arfcn val_trx_arfcn_trx0
nominal power val_trx_nominal_power_trx0
max_power_red val_trx_max_power_red_trx0
rsl e1 tei 0
timeslot 0
phys_chan_config val_phys_chan_config_0
timeslot 1
phys_chan_config val_phys_chan_config_1
timeslot 2
phys_chan_config val_phys_chan_config_2
timeslot 3
phys_chan_config val_phys_chan_config_3
trx 1
rf_locked 0
arfcn val_trx_arfcn_trx1
nominal power val_trx_nominal_power_trx1
max_power_red val_trx_max_power_red_trx1
rsl e1 tei 0
timeslot 0
phys_chan_config val_phys_chan_config_0
timeslot 1
phys_chan_config val_phys_chan_config_1
timeslot 2
phys_chan_config val_phys_chan_config_2
timeslot 3
phys_chan_config val_phys_chan_config_3
bts 1
type val_type_bts1
band val_band_bts1
cell_identity val_bts.cell_identity_bts1
location_area_code val_bts.location_area_code_bts1
training_sequence_code 7
base_station_id_code val_bts.base_station_id_code_bts1
ms max power 33
cell reselection hysteresis 4
rxlev access min 0
channel allocator ascending
rach tx integer 9
rach max transmission 7
ip.access unit_id val_bts.unit_id_bts1 0
oml ip.access stream_id val_bts.stream_id_bts1 line 0
gprs mode gprs
gprs routing area val_bts.routing_area_code_bts1
gprs network-control-order nc1
gprs cell bvci val_bts.bvci_bts1
gprs cell timer blocking-timer 3
gprs cell timer blocking-retries 3
gprs cell timer unblocking-retries 3
gprs cell timer reset-timer 3
gprs cell timer reset-retries 3
gprs cell timer suspend-timer 10
gprs cell timer suspend-retries 3
gprs cell timer resume-timer 10
gprs cell timer resume-retries 3
gprs cell timer capability-update-timer 10
gprs cell timer capability-update-retries 3
gprs nsei val_bts.bvci_bts1
gprs ns timer tns-block 3
gprs ns timer tns-block-retries 3
gprs ns timer tns-reset 3
gprs ns timer tns-reset-retries 3
gprs ns timer tns-test 30
gprs ns timer tns-alive 3
gprs ns timer tns-alive-retries 10
gprs nsvc 0 nsvci val_bts.bvci_bts1
gprs nsvc 0 local udp port 23020
gprs nsvc 0 remote udp port 23000
gprs nsvc 0 remote ip val_bts.sgsn_ip_addr_bts1
trx 0
rf_locked 0
arfcn val_trx_arfcn_trx0
nominal power val_trx_nominal_power_trx0
max_power_red val_trx_max_power_red_trx0
rsl e1 tei 0
timeslot 0
phys_chan_config val_phys_chan_config_0
timeslot 1
phys_chan_config val_phys_chan_config_1
timeslot 2
phys_chan_config val_phys_chan_config_2
timeslot 3
phys_chan_config val_phys_chan_config_3
trx 1
rf_locked 0
arfcn val_trx_arfcn_trx1
nominal power val_trx_nominal_power_trx1
max_power_red val_trx_max_power_red_trx1
rsl e1 tei 0
timeslot 0
phys_chan_config val_phys_chan_config_0
timeslot 1
phys_chan_config val_phys_chan_config_1
timeslot 2
phys_chan_config val_phys_chan_config_2
timeslot 3
phys_chan_config val_phys_chan_config_3
smpp
local-tcp-ip val_ip_address 2775
system-id test-nitb
policy val_smsc_policy
esme val_system_id_esme0
password val_password_esme0
default-route
esme val_system_id_esme1
no password
default-route
ctrl
bind val_ip_address
- Testing: template directory overlay (present in both dirs)
cnf Templates: DBG: rendering osmo-bsc.cfg.tmpl
test-overlay-works-fine yes
- Testing: template directory overlay (present only on overlay dir)
cnf Templates: DBG: rendering mytemplate.cfg.tmpl
test-overlay-works-fine-only-available yes

View File

@ -92,4 +92,13 @@ except RuntimeError:
print('sucess: setting non-existing templates dir raised RuntimeError\n')
pass
mytemplatedir = os.path.join(os.path.dirname(__file__), 'mytemplatedir')
template.set_templates_dir(mytemplatedir, template.default_templates_dir())
print('- Testing: template directory overlay (still can find default one?)')
print(template.render('osmo-nitb.cfg', vals))
print('- Testing: template directory overlay (present in both dirs)')
print(template.render('osmo-bsc.cfg', dict(foo=dict(bar=dict(works='yes')))))
print('- Testing: template directory overlay (present only on overlay dir)')
print(template.render('mytemplate.cfg', dict(one=dict(two=dict(works='yes')))))
# vim: expandtab tabstop=4 shiftwidth=4

View File

@ -27,12 +27,14 @@ from .util import dict2obj
_lookup = None
_logger = log.Origin(log.C_CNF, 'no templates dir set')
def default_templates_dir():
return os.path.join(os.path.dirname(os.path.dirname(__file__)), 'templates')
def set_templates_dir(*templates_dirs):
global _lookup
global _logger
if not templates_dirs:
# default templates dir is relative to this source file
templates_dirs = [os.path.join(os.path.dirname(os.path.dirname(__file__)), 'templates')]
raise RuntimeError('templates dir list is empty!')
for d in templates_dirs:
if not os.path.isdir(d):
raise RuntimeError('templates dir is not a dir: %r'
@ -45,7 +47,7 @@ def render(name, values):
".tmpl" is added to the name to look it up in the templates dir.'''
global _lookup
if _lookup is None:
set_templates_dir()
set_templates_dir(default_templates_dir())
tmpl_name = name + '.tmpl'
log.ctx(tmpl_name)
template = _lookup.get_template(tmpl_name)