blob: 797553d4617f3554b656f7c171a9b42bf9736d15 [file] [log] [blame]
Neels Hofmeyr3531a192017-03-28 14:30:28 +02001#!/usr/bin/env python3
2
3import _prep
4
5import sys
6import os
7import io
8import pprint
9import copy
10
Pau Espin Pedrole8bbcbf2020-04-10 19:51:31 +020011from osmo_gsm_tester.core import config, log, schema
Neels Hofmeyr3531a192017-03-28 14:30:28 +020012
13example_config_file = 'test.cfg'
Pau Espin Pedrolab1904a2020-05-06 18:35:26 +020014example_config = os.path.join(_prep.script_dir, example_config_file)
Neels Hofmeyr3531a192017-03-28 14:30:28 +020015cfg = config.read(example_config)
16
Neels Hofmeyr2694a9d2017-04-27 19:48:09 +020017pprint.pprint(cfg, width=81)
Neels Hofmeyr3531a192017-03-28 14:30:28 +020018
19test_schema = {
20 'modems[].dbus_path': schema.STR,
21 'modems[].msisdn': schema.STR,
22 'modems[].imsi': schema.IMSI,
23 'modems[].ki': schema.STR,
24 'bts[].name' : schema.STR,
25 'bts[].type' : schema.STR,
26 'bts[].addr' : schema.STR,
27 'bts[].trx[].timeslots[]' : schema.STR,
28 'bts[].trx[].band' : schema.BAND,
29 'a_dict.foo' : schema.INT,
30 'addr[]' : schema.IPV4,
31 'hwaddr[]' : schema.HWADDR,
32 'imsi[]' : schema.IMSI,
33 'ki[]' : schema.KI,
34 }
35
36def val(which):
37 try:
38 schema.validate(which, test_schema)
39 print('Validation: OK')
40 except ValueError:
41 log.log_exn()
42 print('Validation: Error')
43
44print('- expect validation success:')
45val(cfg)
46
47print('- unknown item:')
48c = copy.deepcopy(cfg)
49c['bts'][0]['unknown_item'] = 'no'
50val(c)
51
52print('- wrong type modems[].imsi:')
53c = copy.deepcopy(cfg)
54c['modems'][0]['imsi'] = {'no':'no'}
55val(c)
56
57print('- invalid key with space:')
58c = copy.deepcopy(cfg)
59c['modems'][0]['imsi '] = '12345'
60val(c)
61
62print('- list instead of dict:')
63c = copy.deepcopy(cfg)
64c['a_dict'] = [ 1, 2, 3 ]
65val(c)
66
67print('- unknown band:')
68c = copy.deepcopy(cfg)
69c['bts'][0]['trx'][0]['band'] = 'what'
70val(c)
71
72print('- invalid v4 addrs:')
73c = copy.deepcopy(cfg)
74c['addr'][3] = '1.2.3'
75val(c)
76c['addr'][3] = '1.2.3 .4'
77val(c)
78c['addr'][3] = '91.2.3'
79val(c)
80c['addr'][3] = 'go away'
81val(c)
82c['addr'][3] = ''
83val(c)
84c['addr'][3] = None
85val(c)
86
87print('- invalid hw addrs:')
88c = copy.deepcopy(cfg)
89c['hwaddr'][3] = '1.2.3'
90val(c)
91c['hwaddr'][3] = '0b:0c:0d:0e:0f:0g'
92val(c)
93c['hwaddr'][3] = '0b:0c:0d:0e : 0f:0f'
94val(c)
95c['hwaddr'][3] = 'go away'
96val(c)
97c['hwaddr'][3] = ''
98val(c)
99c['hwaddr'][3] = None
100val(c)
101
102print('- invalid imsis:')
103c = copy.deepcopy(cfg)
104c['imsi'][2] = '99999999x9'
105val(c)
106c['imsi'][2] = '123 456 789 123'
107val(c)
108c['imsi'][2] = 'go away'
109val(c)
110c['imsi'][2] = ''
111val(c)
112c['imsi'][2] = None
113val(c)
114
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200115print('- Combine dicts:')
116a = {'times': '2'}
117b = {'type': 'osmo-bts-trx'}
118res = {'times': '2', 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200119schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200120assert a == res
121
122print('- Combine dicts 2:')
123a = {'times': '1', 'label': 'foo', 'type': 'osmo-bts-trx'}
124b = {'type': 'osmo-bts-trx'}
125res = {'times': '1', 'label': 'foo', 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200126schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200127assert a == res
128
129print('- Combine lists:')
130a = { 'a_list': ['x', 'y', 'z'] }
131b = { 'a_list': ['y'] }
132res = {'a_list': ['x', 'y', 'z']}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200133schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200134assert a == res
135
136print('- Combine lists 2:')
137a = { 'a_list': ['x'] }
138b = { 'a_list': ['w', 'u', 'x', 'y', 'z'] }
139res = {'a_list': ['x', 'w', 'u', 'y', 'z']}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200140schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200141assert a == res
142
143print('- Combine lists 3:')
144a = { 'a_list': ['x', 3] }
145b = { 'a_list': ['y', 'z'] }
146try:
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200147 schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200148except ValueError:
149 print("ValueError expected")
150
151print('- Combine lists 4:')
152a = { 'a_list': [2, 3] }
153b = { 'a_list': ['y', 'z'] }
154try:
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200155 schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200156except ValueError:
157 print("ValueError expected")
158
159print('- Combine lists 5:')
160a = { 'a_list': [{}, {}] }
161b = { 'a_list': ['y', 'z'] }
162try:
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200163 schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200164except ValueError:
165 print("ValueError expected")
166
167print('- Combine lists 6:')
168a = { 'a_list': [{}, {}] }
169b = { 'a_list': [{}] }
170res = {'a_list': [{}, {}]}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200171schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200172assert a == res
173
174print('- Combine lists 7:')
175a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
176b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
177res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200178schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200179assert a == res
180
181print('- Combine lists 8:')
182a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}] }
183b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
184res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200185schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200186assert a == res
187
188print('- Combine lists 9:')
189a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
190b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}] }
191res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200192schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200193assert a == res
194
195print('- Combine lists 10:')
196a = { 'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
197b = { 'type': 'osmo-bts-trx', 'trx': [{}, {'nominal power': '12'}] }
198res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200199schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200200assert a == res
201
202print('- Combine lists 13:')
203a = { 'times': '1', 'label': 'foo', 'trx': [{}, {'nominal power': '12'}] }
204b = { 'type': 'osmo-bts-trx', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}] }
205res = {'times': '1', 'label': 'foo', 'trx': [{'nominal power': '10'}, {'nominal power': '12'}], 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200206schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200207assert a == res
208
209print('- Combine lists 14:')
210a = { 'times': '1', 'label': 'foo', 'trx': [] }
211b = { 'type': 'osmo-bts-trx', 'trx': [] }
212res = {'times': '1', 'label': 'foo', 'trx': [], 'type': 'osmo-bts-trx'}
Pau Espin Pedrolea8c3d42020-05-04 12:05:05 +0200213schema.combine(a, b)
Pau Espin Pedrol43737da2017-08-28 14:04:07 +0200214assert a == res
215
Neels Hofmeyr3531a192017-03-28 14:30:28 +0200216# vim: expandtab tabstop=4 shiftwidth=4