# Copyright (c) Huawei Technologies Co., Ltd. 2026-2026. All rights reserved.
# OpenOLC is licensed under Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#         `http://license.coscl.org.cn/MulanPSL2`
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.

import unittest
from olc.bean.match_wrapper import MatchWrapper
from olc.bean.tag_group import TagGroup
from olc.bean.olc_config_rule import FlowPolicy


class TestMatchWrapper(unittest.TestCase):
    def test_initialization(self):
        """测试MatchWrapper的初始化"""
        tag_group = TagGroup(domain="test_domain", name="test_group")
        policy = FlowPolicy(
            name="test_policy",
            category="test_category",
            enabled=True,
            block_msg="test_block_msg",
            policy_type="NODE",
            time_unit="second",
            time_interval=1,
            rate_limit=100,
            burst_limit=200,
            flow_control_mode="qps",
            max_wait_time_ms=500,
            calculate_alg=None,
            assign_alg=None
        )
        wrapper = MatchWrapper(tag_group, policy)
        self.assertEqual(wrapper.tag_group, tag_group)
        self.assertEqual(wrapper.policy, policy)

    def test_get_policy(self):
        """测试get_policy方法"""
        tag_group = TagGroup(domain="test_domain", name="test_group")
        policy = FlowPolicy(
            name="test_policy",
            category="test_category",
            enabled=True,
            block_msg="test_block_msg",
            policy_type="NODE",
            time_unit="second",
            time_interval=1,
            rate_limit=100,
            burst_limit=200,
            flow_control_mode="qps",
            max_wait_time_ms=500,
            calculate_alg=None,
            assign_alg=None
        )
        wrapper = MatchWrapper(tag_group, policy)
        self.assertEqual(wrapper.get_policy(), policy)

    def test_repr_method(self):
        """测试__repr__方法"""
        tag_group = TagGroup(domain="test_domain", name="test_group")
        policy = FlowPolicy(
            name="test_policy",
            category="test_category",
            enabled=True,
            block_msg="test_block_msg",
            policy_type="NODE",
            time_unit="second",
            time_interval=1,
            rate_limit=100,
            burst_limit=200,
            flow_control_mode="qps",
            max_wait_time_ms=500,
            calculate_alg=None,
            assign_alg=None
        )
        wrapper = MatchWrapper(tag_group, policy)
        repr_str = repr(wrapper)
        self.assertIn("Matchwrapper", repr_str)
        self.assertIn("test_group", repr_str)
        self.assertIn("test_policy", repr_str)

    def test_str_method(self):
        """测试__str__方法"""
        tag_group = TagGroup(domain="test_domain", name="test_group")
        policy = FlowPolicy(
            name="test_policy",
            category="test_category",
            enabled=True,
            block_msg="test_block_msg",
            policy_type="NODE",
            time_unit="second",
            time_interval=1,
            rate_limit=100,
            burst_limit=200,
            flow_control_mode="qps",
            max_wait_time_ms=500,
            calculate_alg=None,
            assign_alg=None
        )
        wrapper = MatchWrapper(tag_group, policy)
        str_str = str(wrapper)
        self.assertIn("Matchwrapper", str_str)
        self.assertIn("test_group", str_str)
        self.assertIn("test_policy", str_str)


if __name__ == '__main__':
    unittest.main()