# Copyright (c) 2024, Felix Fontein # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later from __future__ import absolute_import, division, print_function __metaclass__ = type import pytest from ansible_collections.community.docker.plugins.module_utils._logfmt import ( InvalidLogFmt, parse_line, ) SUCCESS_TEST_CASES = [ ( 'time="2024-02-02T08:14:10+01:00" level=warning msg="a network with name influxNetwork exists but was not' ' created for project \\"influxdb\\".\\nSet `external: true` to use an existing network"', {}, { "time": "2024-02-02T08:14:10+01:00", "level": "warning", "msg": 'a network with name influxNetwork exists but was not created for project "influxdb".\nSet `external: true` to use an existing network', }, ), ( 'time="2024-02-02T08:14:10+01:00" level=warning msg="a network with name influxNetwork exists but was not' ' created for project \\"influxdb\\".\\nSet `external: true` to use an existing network"', {"logrus_mode": True}, { "time": "2024-02-02T08:14:10+01:00", "level": "warning", "msg": 'a network with name influxNetwork exists but was not created for project "influxdb".\nSet `external: true` to use an existing network', }, ), ( 'foo=bar a=14 baz="hello kitty" cool%story=bro f %^asdf', {}, { "foo": "bar", "a": "14", "baz": "hello kitty", "cool%story": "bro", "f": None, "%^asdf": None, }, ), ( '{"foo":"bar"}', {}, { "{": None, "foo": None, ":": None, "bar": None, "}": None, }, ), ] FAILURE_TEST_CASES = [ ( 'foo=bar a=14 baz="hello kitty" cool%story=bro f %^asdf', {"logrus_mode": True}, 'Key must always be followed by "=" in logrus mode', ), ( "{}", {"logrus_mode": True}, 'Key must always be followed by "=" in logrus mode', ), ( "[]", {"logrus_mode": True}, 'Key must always be followed by "=" in logrus mode', ), ( '{"foo=bar": "baz=bam"}', {"logrus_mode": True}, 'Key must always be followed by "=" in logrus mode', ), ] @pytest.mark.parametrize("line, kwargs, result", SUCCESS_TEST_CASES) def test_parse_line_success(line, kwargs, result): res = parse_line(line, **kwargs) print(repr(res)) assert res == result @pytest.mark.parametrize("line, kwargs, message", FAILURE_TEST_CASES) def test_parse_line_failure(line, kwargs, message): with pytest.raises(InvalidLogFmt) as exc: parse_line(line, **kwargs) print(repr(exc.value.args[0])) assert exc.value.args[0] == message