def test_parse_environ(self): os.environ["PROJECT_KEY"] = "ABCDEFGH" content = {"variables": [{"PROJECT_KEY": "${ENV(PROJECT_KEY)}"}]} result = parser.eval_lazy_data(content) content = {"variables": [{"PROJECT_KEY": "${ENV(PROJECT_KEY, abc)}"}]} with self.assertRaises(exceptions.ParamsError): parser.eval_lazy_data(content) content = {"variables": [{"PROJECT_KEY": "${ENV(abc=123)}"}]} with self.assertRaises(exceptions.ParamsError): parser.eval_lazy_data(content)
def test_parse_data_multiple_identical_variables(self): variables_mapping = {"userid": 100, "data": 1498} content = "/users/$userid/training/$data?userId=$userid&data=$data" self.assertEqual( parser.eval_lazy_data(content, variables_mapping=variables_mapping), "/users/100/training/1498?userId=100&data=1498") variables_mapping = {"user": 100, "userid": 1000, "data": 1498} content = "/users/$user/$userid/$data?userId=$userid&data=$data" self.assertEqual( parser.eval_lazy_data(content, variables_mapping=variables_mapping), "/users/100/1000/1498?userId=1000&data=1498")
def test_parse_data(self): content = { 'request': { 'url': '/api/users/$uid', 'method': "$method", 'headers': { 'token': '$token' }, 'data': { "null": None, "true": True, "false": False, "empty_str": "", "value": "abc${add_one(3)}def" } } } variables_mapping = {"uid": 1000, "method": "POST", "token": "abc123"} functions_mapping = {"add_one": lambda x: x + 1} result = parser.eval_lazy_data(content, variables_mapping, functions_mapping) self.assertEqual("/api/users/1000", result["request"]["url"]) self.assertEqual("abc123", result["request"]["headers"]["token"]) self.assertEqual("POST", result["request"]["method"]) self.assertIsNone(result["request"]["data"]["null"]) self.assertTrue(result["request"]["data"]["true"]) self.assertFalse(result["request"]["data"]["false"]) self.assertEqual("", result["request"]["data"]["empty_str"]) self.assertEqual("abc4def", result["request"]["data"]["value"])
def test_parse_data_functions(self): import random, string functions_mapping = { "gen_random_string": gen_random_string } result = parser.eval_lazy_data("${gen_random_string(5)}", functions_mapping=functions_mapping) self.assertEqual(len(result), 5) add_two_nums = lambda a, b=1: a + b functions_mapping["add_two_nums"] = add_two_nums self.assertEqual( parser.eval_lazy_data("${add_two_nums(1)}", functions_mapping=functions_mapping), 2 ) self.assertEqual( parser.eval_lazy_data("${add_two_nums(1, 2)}", functions_mapping=functions_mapping), 3 ) self.assertEqual( parser.eval_lazy_data("/api/${add_two_nums(1, 2)}", functions_mapping=functions_mapping), "/api/3" ) with self.assertRaises(exceptions.FunctionNotFound): parser.eval_lazy_data("/api/${gen_md5(abc)}", functions_mapping=functions_mapping)
def test_parse_data_testcase(self): variables = { "uid": "1000", "random": "A2dEx", "authorization": "a83de0ff8d2e896dbd8efb81ba14e17d", "data": {"name": "user", "password": "******"} } functions = { "add_two_nums": lambda a, b=1: a + b, "get_timestamp": lambda: int(time.time() * 1000) } testcase_template = { "url": "http://127.0.0.1:5000/api/users/$uid/${add_two_nums(1,2)}", "method": "POST", "headers": { "Content-Type": "application/json", "authorization": "$authorization", "random": "$random", "sum": "${add_two_nums(1, 2)}" }, "body": "$data" } parsed_testcase = parser.eval_lazy_data( testcase_template, variables_mapping=variables, functions_mapping=functions ) self.assertEqual( parsed_testcase["url"], "http://127.0.0.1:5000/api/users/1000/3" ) self.assertEqual( parsed_testcase["headers"]["authorization"], variables["authorization"] ) self.assertEqual( parsed_testcase["headers"]["random"], variables["random"] ) self.assertEqual( parsed_testcase["body"], variables["data"] ) self.assertEqual( parsed_testcase["headers"]["sum"], 3 )
def test_eval_lazy_data(self): variables_mapping = { "var_1": "abc", "var_2": "def", "var_3": 123, "var_4": { "a": 1 }, "var_5": True, "var_6": None } self.assertEqual( parser.eval_lazy_data("$var_1", variables_mapping=variables_mapping), "abc") self.assertEqual( parser.eval_lazy_data("var_1", variables_mapping=variables_mapping), "var_1") self.assertEqual( parser.eval_lazy_data("$var_1#XYZ", variables_mapping=variables_mapping), "abc#XYZ") self.assertEqual( parser.eval_lazy_data("/$var_1/$var_2/var3", variables_mapping=variables_mapping), "/abc/def/var3") self.assertEqual( parser.eval_lazy_data("/$var_1/$var_2/$var_1", variables_mapping=variables_mapping), "/abc/def/abc") self.assertEqual( parser.eval_lazy_data("$var_3", variables_mapping=variables_mapping), 123) self.assertEqual( parser.eval_lazy_data("$var_4", variables_mapping=variables_mapping), {"a": 1}) self.assertEqual( parser.eval_lazy_data("$var_5", variables_mapping=variables_mapping), True) self.assertEqual( parser.eval_lazy_data("abc$var_5", variables_mapping=variables_mapping), "abcTrue") self.assertEqual( parser.eval_lazy_data("abc$var_4", variables_mapping=variables_mapping), "abc{'a': 1}") self.assertEqual( parser.eval_lazy_data("$var_6", variables_mapping=variables_mapping), None) with self.assertRaises(exceptions.VariableNotFound): parser.eval_lazy_data("/api/$SECRET_KEY", variables_mapping=variables_mapping) self.assertEqual( parser.eval_lazy_data(["$var_1", "$var_2"], variables_mapping=variables_mapping), ["abc", "def"]) self.assertEqual( parser.eval_lazy_data({"$var_1": "$var_2"}, variables_mapping=variables_mapping), {"abc": "def"})