@Test
    public void conflictMatchTest() {
        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("2")
                .name("test-plugin-rule")
                .enabled(true)
                .sort(1)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        
        RuleData ruleData2 = RuleData.builder()
                .id("2")
                .pluginName("test3")
                .selectorId("3")
                .name("test-plugin-rule")
                .enabled(true)
                .sort(1)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        
        RuleData ruleData3 = RuleData.builder()
                .id("2")
                .pluginName("test3")
                .selectorId("43")
                .name("test-plugin-rule")
                .enabled(true)
                .sort(1)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        
        shenyuAntPathTrie.putNode("/http/**", ruleData, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/http/client/hello", ruleData2, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/http/client/hell", ruleData2, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/http/{name}/hell", ruleData3, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/http/*/helle", ruleData3, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/http/**/hello", ruleData3, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.match("/http/client/hell", "43"));
    }
");
        RuleData ruleData = RuleData.builder()
                .id("1")
                .pluginName("test")
                .selectorId("2")
                .name("test-plugin-rule")
                .enabled(true)
                .sort(1)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        RuleData ruleData2 = RuleData.builder()
                .id("2")
                .pluginName("test")
                .selectorId("2")
                .name("test-plugin-rule2")
                .enabled(true)
                .sort(2)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        shenyuAntPathTrie.putNode("/a/b/c/**", ruleData, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/a/b/c/**", ruleData2, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.remove("/a/b/c/**", ruleData2, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.getNode("/a/b/c/**", "2"));
        shenyuAntPathTrie.remove("/a/b/c/**", ruleData, TrieCacheTypeEnum.RULE);
        Assertions.assertNull(shenyuAntPathTrie.getNode("/a/b/c/**", "1"));
    
        RuleData ruleData3 = RuleData.builder()
                .id("3")
                .pluginName("test")
                .selectorId("3")
                .name("test-plugin-rule3")
                .enabled(true)
                .sort(2)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        shenyuAntPathTrie.putNode("/path1/path2", ruleData3, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.remove("/path1/path2", ruleData3, TrieCacheTypeEnum.RULE);
        Assertions.assertNull(shenyuAntPathTrie.getNode("/path1/path2", "3"));
    }
    
    @Test
    public void getNode() {
        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("2")
                .name("test-plugin-rule")
                .enabled(true)
                .sort(1)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        RuleData ruleData2 = RuleData.builder()
                .id("2")
                .pluginName("test2")
                .selectorId("2")
                .name("test-plugin-rule2")
                .enabled(true)
                .sort(2)
                .conditionDataList(Collections.singletonList(conditionData))
                .build();
        shenyuAntPathTrie.putNode("/a/b/c/**", ruleData, TrieCacheTypeEnum.RULE);
        shenyuAntPathTrie.putNode("/a/b/c/**", ruleData2, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.getNode("/a/b/c/**", "2"));
        shenyuAntPathTrie.putNode("/path1/{age}/{name}", ruleData2, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.getNode("/path1/{age}/{name}", "2"));
        shenyuAntPathTrie.putNode("/aaa/bbb/ccc", ruleData2, TrieCacheTypeEnum.RULE);
        Assertions.assertNotNull(shenyuAntPathTrie.getNode("/aaa/bbb/ccc", "2"));
        shenyuAntPathTrie.putNode("/aa/
shenyu-plugin/shenyu-plugin-base/src/test/java/org/apache/shenyu/plugin/base/trie/ShenyuRuleTrieTest.java