blob: e5797327620b1ffa3935752036a78cb231755638 [file] [log] [blame]
Pau Espin Pedrolb99b0f32020-03-17 20:18:30 +01001
2* Data processing can be understood as operations on sets (link:https://duckduckgo.com/?q=Venn+diagram[Venn diagram])
3
4----
5$ src/osmo-gsm-tester.py "$TRIAL_JOB_DIR" -s 4g:srsenb-rftype@zmq+srsue-rftype@zmq+mod-enb-nprb@6 -t ping.py
6----
7
8
9
10* First Suite and scenarios dictionaries ('resources', 'modifiers', 'config') are combined (set union operation):
11
12[cols="1,5a,5a,10a,10a"]
13.Manual replica of 'suite.py resource_requirements()' and 'resource_modifiers()' methods
14|===
15|File|original|after 'times' replication|python syntax|combined
16
17|4g
18|
19----
20run_node:
21- times: 1
22enb:
23- times: 1
24 type: srsenb
25modem:
26- times: 2
27 type: srsue
28----
29|
30----
31run_node:
32- {}
33enb:
34- type: srsenb
35modem:
36- type: srsue
37- type: srsue
38----
39|
40----
41'resources': {
42 'run_node': [{}],
43 'enb': [{'type': 'srsenb'}],
44 'modem': [{'type: 'srsue'},
45 {'type: 'srsue'}]
46}
47'modifiers': {}
48----
49|
50----
51'resources': {
52 'run_node': [{}],
53 'enb': [{'type': 'srsenb'}],
54 'modem': [{'type': 'srsue'},
55 {'type': 'srsue'}]
56
57}
58'modifiers': {}
59----
60|srsenb-rftype@zmq
61|
62----
63resources:
64 enb:
65 - type: srsenb
66 rf_dev_type: zmq
67----
68|
69----
70resources:
71 enb:
72 - type: srsenb
73 rf_dev_type: zmq
74----
75|
76----
77'resources': {
78 'enb': [{'type': 'srsenb',
79 'rf_dev_type': 'zmq'}]
80}
81'modifiers': {}
82----
83|
84----
85'resources': {
86 'run_node': [{}],
87 'enb': [{'type': 'srsenb',
88 'rf_dev_type': 'zmq'}],
89 'modem': [{'type': 'srsue'},
90 {'type': 'srsue'}]
91}
92'modifiers': {}
93----
94|srsue-rftype@zmq
95|
96----
97resources:
98 modem:
99 - type: srsue
100 rf_dev_type: zmq
101 times: 1
102----
103|
104----
105resources:
106 modem:
107 - type: srsue
108 rf_dev_type: zmq
109----
110|
111----
112'resources': {
113 'modem': [{'type': 'srsue',
114 'rf_dev_type': 'zmq'}]
115}
116'modifiers': {}
117----
118|
119----
120'resources': {
121 'run_node': [{}],
122 'enb': [{'type': 'srsenb',
123 'rf_dev_type': 'zmq'}],
124 'modem': [{'type': 'srsue',
125 'rf_dev_type': 'zmq'},
126 {'type': 'srsue'}]
127}
128'modifiers': {}
129----
130|mod-enb-nprb@6
131|
132----
133modifiers:
134 enb:
135 - num_prb: 6
136 times: 1
137----
138|
139----
140modifiers:
141 enb:
142 - num_prb: 6
143----
144|
145----
146'resources': {}
147'modifiers': {
148 'enb': [{'num_prb': 6}]
149}
150----
151|
152----
153'resources': {
154 'run_node': [{}],
155 'enb': [{'type': 'srsenb',
156 'rf_dev_type': 'zmq'}],
157 'modem': [{'type': 'srsue',
158 'rf_dev_type': 'zmq'},
159 {'type': 'srsue'}]
160}
161'modifiers': {
162 'enb': [{'num_prb': 6}]
163}
164----
165|===
166
167* Second, the resulting 'resources' set is used to match a set of resources from 'resources.list' in order to allocate them (intersection of sets):
168
169[cols="5a,5a,10a"]
170.Manual replica of 'resource.py reserve()' method
171|===
172|resources.conf|'resources' filters|matched
173
174|
175----
176run_node:
177- run_type: ssh
178 run_addr: 10.12.1.195
179 ssh_user: jenkins
180 ssh_addr: 10.12.1.195
181
182enb:
183- label: srsENB-zmq
184 type: srsenb
185 rf_dev_type: zmq
186 remote_user: jenkins
187 addr: 10.12.1.206
188
189- label: srsENB-B200
190 type: srsenb
Pau Espin Pedrol6b8f5ae2020-04-07 18:51:57 +0200191 rf_dev_type: uhd
Pau Espin Pedrolb99b0f32020-03-17 20:18:30 +0100192 rf_dev_args: "type=b200,serial=317B9FE"
193 remote_user: jenkins
194 addr: 10.12.1.206
195
196modem:
197- label: srsUE-zmq_1
198 type: srsue
199 rf_dev_type: zmq
200 remote_user: jenkins
201 addr: 10.12.1.195
202 imsi: '001010123456789'
203 ki: '001123'
204
205- label: srsUE-zq_2
206 type: srsue
207 rf_dev_type: zmq
208 remote_user: jenkins
209 addr: 10.12.1.180
210 imsi: '001010123456781'
211 ki: '001124'
212----
213|
214----
215'resources': {
216 'run_node': [{}],
217 'enb': [{'type': 'srsenb',
218 'rf_dev_type': 'zmq'}],
219 'modem': [
220 {'type': 'srsue',
221 'rf_dev_type': 'zmq'},
222 {'type': 'srsue'}
223 ]
224}
225----
226|
227----
228'resources': {
229 'run_node': [{'run_type': 'ssh',
230 'run_addr': '10.12.1.195',
231 'ssh_user': 'jenkins',
232 'ssh_addr': '10.12.1.195'}],
233 'enb': [{'label': 'srsENB-zmq',
234 'type': 'srsenb',
235 'rf_dev_type': 'zmq',
236 'remote_user': 'jenkins',
237 'addr': 10.12.1.206}],
238 'modem': [
239 {'label': 'srsUE-zmq_1',
240 'type': 'srsue',
241 'remote_user': jenkins,
242 'addr': '10.12.1.195',
243 'imsi': '001010123456789'
244 'ki': '001123',
245 'rf_dev_type': 'zmq'},
246 {'label': 'srsUE-zmq_2',
247 'type': 'srsue',
248 'remote_user': jenkins,
249 'addr': '10.12.1.180',
250 'imsi': '001010123456781'
251 'ki': '001124'}
252 ]
253}
254----
255|===
256
257* Finally, modifiers are applied on top of the combined configuration before
258 being passed to the python class managing it:
259
260[cols="5a,5a,10a"]
261.Also done by 'resource.py reserve()' method after matching resources
262|===
263|Matched resources|modifiers|Result
264
265|
266----
267'resources': {
268 'run_node': [{'run_type': 'ssh',
269 'run_addr': '10.12.1.195',
270 'ssh_user': 'jenkins',
271 'ssh_addr': '10.12.1.195'}],
272 'enb': [{'label': 'srsENB-zmq',
273 'type': 'srsenb',
274 'rf_dev_type': 'zmq',
275 'remote_user': 'jenkins',
276 'addr': 10.12.1.206}],
277 'modem': [
278 {'label': 'srsUE-zmq_1',
279 'type': 'srsue',
280 'remote_user': jenkins,
281 'addr': '10.12.1.195',
282 'imsi': '001010123456789'
283 'ki': '001123',
284 'rf_dev_type': 'zmq'},
285 {'label': 'srsUE-zmq_2',
286 'type': 'srsue',
287 'remote_user': jenkins,
288 'addr': '10.12.1.180',
289 'imsi': '001010123456781'
290 'ki': '001124'}
291 ]
292}
293----
294|
295----
296'modifiers': {
297 'enb': [{'num_prb': 6}]
298}
299----
300|
301----
302'resources': {
303 'run_node': [{'run_type': 'ssh',
304 'run_addr': '10.12.1.195',
305 'ssh_user': 'jenkins',
306 'ssh_addr': '10.12.1.195'}],
307 'enb': [{'label': 'srsENB-zmq',
308 'type': 'srsenb',
309 'rf_dev_type': 'zmq',
310 'remote_user': 'jenkins',
311 'addr': '10.12.1.206',
312 'num_prb': 6}],
313 'modem': [
314 {'label': 'srsUE-zmq_1',
315 'type': 'srsue',
316 'remote_user': jenkins,
317 'addr': 10.12.1.195,
318 'imsi': '001010123456789'
319 'ki': '001123',
320 'rf_dev_type': 'zmq'},
321 {'label': 'srsUE-zmq_2',
322 'type': 'srsue',
323 'remote_user': jenkins,
324 'addr': 10.12.1.180,
325 'imsi': '001010123456781'
326 'ki': '001124'}
327 ]
328}
329----
330|===
331
332WARNING: Right now algorithms based on lists of scalar/simple types being
333unordered vs complex types (dictionaries, list) being ordered. Other ways can be
334supported by explicitly using 'set' type from yaml in lists of scalars.