public BitList<Invoker<T>> getInvokers() {
        return invokers;
    }
@Test
    void tagRouterRuleParseTestV3() {
        String tagRouterRuleConfig = "---\n" + "configVersion: v3.0\n"
                + "force: false\n"
                + "runtime: true\n"
                + "enabled: true\n"
                + "priority: 1\n"
                + "key: demo-provider\n"
                + "tags:\n"
                + "  - name: tag1\n"
                + "    match:\n"
                + "    - key: match_key1\n"
                + "      value:\n"
                + "       exact: value1\n"
                + "  - name: tag2\n"
                + "    addresses:\n"
                + "     - \"10.20.3.3:20880\"\n"
                + "     - \"10.20.3.4:20880\"\n"
                + "    match:\n"
                + "    - key: match_key2\n"
                + "      value:\n"
                + "       exact: value2\n"
                + "  - name: tag3\n"
                + "    match:\n"
                + "    - key: match_key2\n"
                + "      value:\n"
                + "       exact: value2\n"
                + "  - name: tag4\n"
                + "    match:\n"
                + "    - key: not_exist\n"
                + "      value:\n"
                + "       exact: not_exist\n"
                + "  - name: tag5\n"
                + "    match:\n"
                + "    - key: match_key2\n"
                + "      value:\n"
                + "       wildcard: \"*\"\n"
                + "...";

        TagRouterRule tagRouterRule = TagRuleParser.parse(tagRouterRuleConfig);
        TagStateRouter<String> router = Mockito.mock(TagStateRouter.class);
        Mockito.when(router.getInvokers()).thenReturn(getInvokers());
        tagRouterRule.init(router);

        // assert tags
        assert tagRouterRule.getKey().equals("demo-provider");
        assert tagRouterRule.getPriority() == 1;
        assert tagRouterRule.getTagNames().contains("tag1");
        assert tagRouterRule.getTagNames().contains("tag2");
        assert tagRouterRule.getTagNames().contains("tag3");
        assert tagRouterRule.getTagNames().contains("tag4");
        // assert addresses
        assert tagRouterRule.getAddresses().size() == 2;
        assert tagRouterRule.getAddresses().contains("10.20.3.3:20880");
        assert tagRouterRule.getTagnameToAddresses().get("tag1").size() == 2;
        assert tagRouterRule.getTagnameToAddresses().get("tag2").size() == 2;
        assert tagRouterRule.getTagnameToAddresses().get("tag3").size() == 1;
        assert tagRouterRule.getTagnameToAddresses().get("tag5").size() == 1;
        assert tagRouterRule.getTagnameToAddresses().get("tag4") == null;
    }