355 lines
13 KiB
Python
Executable File
355 lines
13 KiB
Python
Executable File
#!/usr/bin/python3
|
|
# Lint as: python2, python3
|
|
# pylint: disable=missing-docstring,bad-indentation
|
|
|
|
import common
|
|
import unittest
|
|
import logging
|
|
|
|
from autotest_lib.client.common_lib.config_vars import TransformJsonText, ConfigTransformError
|
|
|
|
|
|
class ConfigVarsTransformTestCase(unittest.TestCase):
|
|
def testSimple(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz"
|
|
}""", {"qwe": "asd"}), {'a': 'zzz'})
|
|
|
|
def testSimpleCond(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "asd",
|
|
"value": "vvvvv"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv'
|
|
})
|
|
|
|
def testSimpleCond2(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"value": "vvvvv"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv'
|
|
})
|
|
|
|
def testSimpleCondFallback(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "xxx",
|
|
"value": "vvvvv1"
|
|
},
|
|
{
|
|
"AAA": "yyy",
|
|
"value": "vvvvv2"
|
|
},
|
|
{
|
|
"value": "vvvvv3"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv3'
|
|
})
|
|
|
|
def testNoMatch(self):
|
|
logging.disable(logging.CRITICAL)
|
|
self.assertRaises(
|
|
ConfigTransformError, TransformJsonText, """{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"XXX": "asd",
|
|
"value": "vvvvv"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"})
|
|
logging.disable(logging.NOTSET)
|
|
|
|
def testUnmatch(self):
|
|
logging.disable(logging.CRITICAL)
|
|
self.assertRaises(
|
|
ConfigTransformError, TransformJsonText, """{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "zzz",
|
|
"value": "vvvvv"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"})
|
|
logging.disable(logging.NOTSET)
|
|
|
|
def testMatchFirst(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "asd",
|
|
"value": "vvvvv1"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"value": "vvvvv2"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv1'
|
|
})
|
|
|
|
def testMatchMid(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "zzz",
|
|
"value": "vvvvv1"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"BBB": "jjj",
|
|
"value": "vvvvv2"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"value": "vvvvv3"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"CCC": "qwe",
|
|
"value": "vvvvv4"
|
|
}
|
|
]
|
|
}""", {
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"CCC": "qwe"
|
|
}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv3'
|
|
})
|
|
|
|
def testMatchLast(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "zzz",
|
|
"value": "vvvvv1"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"BBB": "jjj",
|
|
"value": "vvvvv2"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"CCC": "jjj",
|
|
"value": "vvvvv3"
|
|
},
|
|
{
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"CCC": "qwe",
|
|
"value": "vvvvv4"
|
|
}
|
|
]
|
|
}""", {
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"CCC": "qwe"
|
|
}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv4'
|
|
})
|
|
|
|
def testNested(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "asd",
|
|
"value": [
|
|
{
|
|
"BBB": "zxc",
|
|
"value": [
|
|
{
|
|
"CCC": "qwe",
|
|
"value": "vvvvv4"
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}""", {
|
|
"AAA": "asd",
|
|
"BBB": "zxc",
|
|
"CCC": "qwe"
|
|
}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv4'
|
|
})
|
|
|
|
def testRegex(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "^a.*",
|
|
"value": "vvvvv"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv'
|
|
})
|
|
|
|
def testRegexCase(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": "^A.*D$",
|
|
"value": "vvvvv"
|
|
}
|
|
]
|
|
}""", {"AAA": "asd"}), {
|
|
'a': 'zzz',
|
|
'b': 'vvvvv'
|
|
})
|
|
|
|
def testVarExists(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": true,
|
|
"value": "aaa"
|
|
},
|
|
{
|
|
"value": "bbb"
|
|
}
|
|
]
|
|
}""", {"AAA": ""}), {
|
|
'a': 'zzz',
|
|
'b': 'aaa'
|
|
})
|
|
|
|
def testVarExistsNot(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"BBB": true,
|
|
"value": "aaa"
|
|
},
|
|
{
|
|
"value": "bbb"
|
|
}
|
|
]
|
|
}""", {"AAA": ""}), {
|
|
'a': 'zzz',
|
|
'b': 'bbb'
|
|
})
|
|
|
|
def testVarNotExists(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"AAA": false,
|
|
"value": "aaa"
|
|
},
|
|
{
|
|
"value": "bbb"
|
|
}
|
|
]
|
|
}""", {"AAA": ""}), {
|
|
'a': 'zzz',
|
|
'b': 'bbb'
|
|
})
|
|
|
|
def testVarNotExistsNot(self):
|
|
self.assertDictEqual(
|
|
TransformJsonText(
|
|
"""{
|
|
"a": "zzz",
|
|
"b": [
|
|
{
|
|
"BBB": false,
|
|
"value": "aaa"
|
|
},
|
|
{
|
|
"value": "bbb"
|
|
}
|
|
]
|
|
}""", {"AAA": ""}), {
|
|
'a': 'zzz',
|
|
'b': 'aaa'
|
|
})
|
|
|
|
def testEmptyInput(self):
|
|
self.assertRaises(ValueError, TransformJsonText, '', {"qwe": "asd"})
|
|
|
|
def testMalformedJson(self):
|
|
self.assertRaises(ValueError, TransformJsonText, '{qwe',
|
|
{"qwe": "asd"})
|
|
|
|
def testNonObjectTopLevelJson(self):
|
|
logging.disable(logging.CRITICAL)
|
|
self.assertRaises(ConfigTransformError, TransformJsonText, '[1, 2, 3]',
|
|
{"qwe": "asd"})
|
|
logging.disable(logging.NOTSET)
|
|
|
|
def testNonObjectTopLevelJson2(self):
|
|
logging.disable(logging.CRITICAL)
|
|
self.assertRaises(ConfigTransformError, TransformJsonText, '"wwwww"',
|
|
{"qwe": "asd"})
|
|
logging.disable(logging.NOTSET)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|