def test_search_conf_variable(self): SECRET_KEY = utils.search_conf_item("tests/data/demo_binds.yml", "variable", "SECRET_KEY") self.assertTrue(utils.is_variable(("SECRET_KEY", SECRET_KEY))) self.assertEqual(SECRET_KEY, "DebugTalk") SECRET_KEY = utils.search_conf_item("tests/data/subfolder/test.yml", "variable", "SECRET_KEY") self.assertTrue(utils.is_variable(("SECRET_KEY", SECRET_KEY))) self.assertEqual(SECRET_KEY, "DebugTalk") with self.assertRaises(exception.VariableNotFound): utils.search_conf_item("tests/data/subfolder/test.yml", "variable", "variable_not_exist") with self.assertRaises(exception.VariableNotFound): utils.search_conf_item("/user/local/bin", "variable", "SECRET_KEY")
def test_is_variable(self): content = "$var" self.assertTrue(utils.is_variable(content)) content = "$var123" self.assertTrue(utils.is_variable(content)) content = "$var_name" self.assertTrue(utils.is_variable(content)) content = "var" self.assertFalse(utils.is_variable(content)) content = "a$var" self.assertFalse(utils.is_variable(content)) content = "$v ar" self.assertFalse(utils.is_variable(content)) content = " " self.assertFalse(utils.is_variable(content)) content = "$abc*" self.assertFalse(utils.is_variable(content))
def test_is_variable(self): var1 = 123 var2 = "abc" self.assertTrue(utils.is_variable(("var1", var1))) self.assertTrue(utils.is_variable(("var2", var2))) __var = 123 self.assertFalse(utils.is_variable(("__var", __var))) func = lambda x: x + 1 self.assertFalse(utils.is_variable(("func", func))) self.assertFalse(utils.is_variable(("os", os))) self.assertFalse(utils.is_variable(("utils", utils)))
def get_eval_value(self, data): """ evaluate data recursively, each variable in data will be evaluated. """ if isinstance(data, (list, tuple)): return [self.get_eval_value(item) for item in data] if isinstance(data, dict): evaluated_data = {} for key, value in data.items(): evaluated_data[key] = self.get_eval_value(value) return evaluated_data if isinstance(data, (int, float)): return data # data is in string format here data = "" if data is None else data.strip() if utils.is_variable(data): # variable marker: $var variable_name = utils.parse_variable(data) value = self.testcase_variables_mapping.get(variable_name) if value is None: raise exception.ParamsError( "%s is not defined in bind variables!" % variable_name) return value elif utils.is_functon(data): # function marker: ${func(1, 2, a=3, b=4)} fuction_meta = utils.parse_function(data) func_name = fuction_meta['func_name'] args = fuction_meta.get('args', []) kwargs = fuction_meta.get('kwargs', {}) args = self.get_eval_value(args) kwargs = self.get_eval_value(kwargs) return self.testcase_config["functions"][func_name](*args, **kwargs) else: return data