xref: /aosp_15_r20/external/autotest/client/common_lib/config_vars_unittest.py (revision 9c5db1993ded3edbeafc8092d69fe5de2ee02df7)
1#!/usr/bin/python3
2# Lint as: python2, python3
3# pylint: disable=missing-docstring,bad-indentation
4
5import common
6import unittest
7import logging
8
9from autotest_lib.client.common_lib.config_vars import TransformJsonText, ConfigTransformError
10
11
12class ConfigVarsTransformTestCase(unittest.TestCase):
13    def testSimple(self):
14        self.assertDictEqual(
15                TransformJsonText(
16                        """{
17                            "a": "zzz"
18                        }""", {"qwe": "asd"}), {'a': 'zzz'})
19
20    def testSimpleCond(self):
21        self.assertDictEqual(
22                TransformJsonText(
23                        """{
24                            "a": "zzz",
25                            "b": [
26                                {
27                                    "AAA": "asd",
28                                    "value": "vvvvv"
29                                }
30                            ]
31                        }""", {"AAA": "asd"}), {
32                                'a': 'zzz',
33                                'b': 'vvvvv'
34                        })
35
36    def testSimpleCond2(self):
37        self.assertDictEqual(
38                TransformJsonText(
39                        """{
40                            "a": "zzz",
41                            "b": [
42                                {
43                                    "value": "vvvvv"
44                                }
45                            ]
46                        }""", {"AAA": "asd"}), {
47                                'a': 'zzz',
48                                'b': 'vvvvv'
49                        })
50
51    def testSimpleCondFallback(self):
52        self.assertDictEqual(
53                TransformJsonText(
54                        """{
55                            "a": "zzz",
56                            "b": [
57                                {
58                                    "AAA": "xxx",
59                                    "value": "vvvvv1"
60                                },
61                                {
62                                    "AAA": "yyy",
63                                    "value": "vvvvv2"
64                                },
65                                {
66                                    "value": "vvvvv3"
67                                }
68                            ]
69                        }""", {"AAA": "asd"}), {
70                                'a': 'zzz',
71                                'b': 'vvvvv3'
72                        })
73
74    def testNoMatch(self):
75        logging.disable(logging.CRITICAL)
76        self.assertRaises(
77                ConfigTransformError, TransformJsonText, """{
78                    "a": "zzz",
79                    "b": [
80                        {
81                            "XXX": "asd",
82                            "value": "vvvvv"
83                        }
84                    ]
85                }""", {"AAA": "asd"})
86        logging.disable(logging.NOTSET)
87
88    def testUnmatch(self):
89        logging.disable(logging.CRITICAL)
90        self.assertRaises(
91                ConfigTransformError, TransformJsonText, """{
92                    "a": "zzz",
93                    "b": [
94                        {
95                            "AAA": "zzz",
96                            "value": "vvvvv"
97                        }
98                    ]
99                }""", {"AAA": "asd"})
100        logging.disable(logging.NOTSET)
101
102    def testMatchFirst(self):
103        self.assertDictEqual(
104                TransformJsonText(
105                        """{
106                            "a": "zzz",
107                            "b": [
108                                {
109                                    "AAA": "asd",
110                                    "value": "vvvvv1"
111                                },
112                                {
113                                    "AAA": "asd",
114                                    "value": "vvvvv2"
115                                }
116                            ]
117                        }""", {"AAA": "asd"}), {
118                                'a': 'zzz',
119                                'b': 'vvvvv1'
120                        })
121
122    def testMatchMid(self):
123        self.assertDictEqual(
124                TransformJsonText(
125                        """{
126                            "a": "zzz",
127                            "b": [
128                                {
129                                    "AAA": "zzz",
130                                    "value": "vvvvv1"
131                                },
132                                {
133                                    "AAA": "asd",
134                                    "BBB": "jjj",
135                                    "value": "vvvvv2"
136                                },
137                                {
138                                    "AAA": "asd",
139                                    "BBB": "zxc",
140                                    "value": "vvvvv3"
141                                },
142                                {
143                                    "AAA": "asd",
144                                    "BBB": "zxc",
145                                    "CCC": "qwe",
146                                    "value": "vvvvv4"
147                                }
148                            ]
149                        }""", {
150                                "AAA": "asd",
151                                "BBB": "zxc",
152                                "CCC": "qwe"
153                        }), {
154                                'a': 'zzz',
155                                'b': 'vvvvv3'
156                        })
157
158    def testMatchLast(self):
159        self.assertDictEqual(
160                TransformJsonText(
161                        """{
162                            "a": "zzz",
163                            "b": [
164                                {
165                                    "AAA": "zzz",
166                                    "value": "vvvvv1"
167                                },
168                                {
169                                    "AAA": "asd",
170                                    "BBB": "jjj",
171                                    "value": "vvvvv2"
172                                },
173                                {
174                                    "AAA": "asd",
175                                    "BBB": "zxc",
176                                    "CCC": "jjj",
177                                    "value": "vvvvv3"
178                                },
179                                {
180                                    "AAA": "asd",
181                                    "BBB": "zxc",
182                                    "CCC": "qwe",
183                                    "value": "vvvvv4"
184                                }
185                            ]
186                        }""", {
187                                "AAA": "asd",
188                                "BBB": "zxc",
189                                "CCC": "qwe"
190                        }), {
191                                'a': 'zzz',
192                                'b': 'vvvvv4'
193                        })
194
195    def testNested(self):
196        self.assertDictEqual(
197                TransformJsonText(
198                        """{
199                            "a": "zzz",
200                            "b": [
201                                {
202                                    "AAA": "asd",
203                                    "value": [
204                                        {
205                                            "BBB": "zxc",
206                                            "value": [
207                                                {
208                                                    "CCC": "qwe",
209                                                    "value": "vvvvv4"
210                                                }
211                                            ]
212                                        }
213                                    ]
214                                }
215                            ]
216                        }""", {
217                                "AAA": "asd",
218                                "BBB": "zxc",
219                                "CCC": "qwe"
220                        }), {
221                                'a': 'zzz',
222                                'b': 'vvvvv4'
223                        })
224
225    def testRegex(self):
226        self.assertDictEqual(
227                TransformJsonText(
228                        """{
229                            "a": "zzz",
230                            "b": [
231                                {
232                                    "AAA": "^a.*",
233                                    "value": "vvvvv"
234                                }
235                            ]
236                        }""", {"AAA": "asd"}), {
237                                'a': 'zzz',
238                                'b': 'vvvvv'
239                        })
240
241    def testRegexCase(self):
242        self.assertDictEqual(
243                TransformJsonText(
244                        """{
245                            "a": "zzz",
246                            "b": [
247                                {
248                                    "AAA": "^A.*D$",
249                                    "value": "vvvvv"
250                                }
251                            ]
252                        }""", {"AAA": "asd"}), {
253                                'a': 'zzz',
254                                'b': 'vvvvv'
255                        })
256
257    def testVarExists(self):
258        self.assertDictEqual(
259                TransformJsonText(
260                        """{
261                            "a": "zzz",
262                            "b": [
263                                {
264                                    "AAA": true,
265                                    "value": "aaa"
266                                },
267                                {
268                                    "value": "bbb"
269                                }
270                            ]
271                        }""", {"AAA": ""}), {
272                                'a': 'zzz',
273                                'b': 'aaa'
274                        })
275
276    def testVarExistsNot(self):
277        self.assertDictEqual(
278                TransformJsonText(
279                        """{
280                            "a": "zzz",
281                            "b": [
282                                {
283                                    "BBB": true,
284                                    "value": "aaa"
285                                },
286                                {
287                                    "value": "bbb"
288                                }
289                            ]
290                        }""", {"AAA": ""}), {
291                                'a': 'zzz',
292                                'b': 'bbb'
293                        })
294
295    def testVarNotExists(self):
296        self.assertDictEqual(
297                TransformJsonText(
298                        """{
299                            "a": "zzz",
300                            "b": [
301                                {
302                                    "AAA": false,
303                                    "value": "aaa"
304                                },
305                                {
306                                    "value": "bbb"
307                                }
308                            ]
309                        }""", {"AAA": ""}), {
310                                'a': 'zzz',
311                                'b': 'bbb'
312                        })
313
314    def testVarNotExistsNot(self):
315        self.assertDictEqual(
316                TransformJsonText(
317                        """{
318                            "a": "zzz",
319                            "b": [
320                                {
321                                    "BBB": false,
322                                    "value": "aaa"
323                                },
324                                {
325                                    "value": "bbb"
326                                }
327                            ]
328                        }""", {"AAA": ""}), {
329                                'a': 'zzz',
330                                'b': 'aaa'
331                        })
332
333    def testEmptyInput(self):
334        self.assertRaises(ValueError, TransformJsonText, '', {"qwe": "asd"})
335
336    def testMalformedJson(self):
337        self.assertRaises(ValueError, TransformJsonText, '{qwe',
338                          {"qwe": "asd"})
339
340    def testNonObjectTopLevelJson(self):
341        logging.disable(logging.CRITICAL)
342        self.assertRaises(ConfigTransformError, TransformJsonText, '[1, 2, 3]',
343                          {"qwe": "asd"})
344        logging.disable(logging.NOTSET)
345
346    def testNonObjectTopLevelJson2(self):
347        logging.disable(logging.CRITICAL)
348        self.assertRaises(ConfigTransformError, TransformJsonText, '"wwwww"',
349                          {"qwe": "asd"})
350        logging.disable(logging.NOTSET)
351
352
353if __name__ == '__main__':
354    unittest.main()
355