@Test
    public void match() {
        ConditionData conditionData = new ConditionData();
        conditionData.setParamType(ParamTypeEnum.URI.getName());
        conditionData.setOperator(OperatorEnum.MATCH.getAlias());
        conditionData.setParamName("/");
        conditionData.setParamValue("/a/b/c/**");
        RuleData ruleData = RuleData.builder()
                .id("1")
                .pluginName("test")
                .selectorId("1")
                .name("test-plugin-rule")
                .enabled(true)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        
        shenyuAntPathTrie.putNode("/aa/**/*.html", ruleData, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/a/b/c/**", ruleData, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.match("/a/b/c/d/e/f", "1"));

        shenyuAntPathTrie.putNode("/a/b/**/c", ruleData, TrieCacheTypeEnum.RULE);
    
        RuleData ruleData2 = RuleData.builder()
                .id("2")
                .pluginName("test2")
                .selectorId("2")
                .name("test-plugin-rule")
                .enabled(true)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        shenyuAntPathTrie.putNode("/a/*/b/c", ruleData2, TrieCacheTypeEnum.RULE);
        Assertions.assertNull(shenyuAntPathTrie.match("/a/m/b/c", "1"));
        Assertions.assertNotNull(shenyuAntPathTrie.match("/a/m/b/c", "2"));
        
        shenyuAntPathTrie.putNode("/path1/{name}/{age}", ruleData, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.match("/path1/111/222", "1").getFullPath(), "/path1/{name}/{age}");
        Assertions.assertNull(shenyuAntPathTrie.match("/path1/111/222/333", "1"));
        
        shenyuAntPathTrie.putNode("path1/name/age", ruleData, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.match("path1/name/age", "1"));
        Assertions.assertEquals(shenyuAntPathTrie.match("path1/name/age", "1").getFullPath(), "path1/name/age");
        
        shenyuAntPathTrie.putNode("/aa/bb/cc/{name}/{age}/tt", ruleData, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/aa/bb/cc/*/*/ii", ruleData, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/aa/bb/cc/**/hh", ruleData, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.match("/aa/bb/cc/dd/ee/tt", "1"));
        Assertions.assertNotNull(shenyuAntPathTrie.match("/aa/bb/cc/dd/ee/hh", "1"));
        Assertions.assertNotNull(shenyuAntPathTrie.match("/aa/bb/cc/dd/ee/ii", "1"));
        Assertions.assertNotNull(shenyuAntPathTrie.match("/aa/bb/cc/dd/rr/mm/ee/hh", "1"));
        Assertions.assertNull(shenyuAntPathTrie.match("/aa/bb/cc/dd/rr/mm/ee/yy", "1"));
    }
");

        RuleData ruleData = RuleData.builder()
                .id("1")
                .pluginName("test")
                .selectorId("1")
                .name("test-plugin-rule")
                .enabled(true)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        shenyuPathPatternTrie.putNode("/aa/bb/cc/{name}/{age}/tt", ruleData, TrieCacheTypeEnum.RULE);
        shenyuPathPatternTrie.putNode("/aa/bb/cc/
shenyu-plugin/shenyu-plugin-base/src/test/java/org/apache/shenyu/plugin/base/trie/ShenyuRuleTrieTest.java