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