### Question:
UrlUtils { public static boolean isMatchGlobPattern(String pattern, String value, URL param) { if (param != null && pattern.startsWith("$")) { pattern = param.getRawParameter(pattern.substring(1)); } return isMatchGlobPattern(pattern, value); }  static URL parseURL(String address, Map<String, String> defaults); static List<URL> parseURLs(String address, Map<String, String> defaults); static Map<String, Map<String, String>> convertRegister(Map<String, Map<String, String>> register); static Map<String, String> convertSubscribe(Map<String, String> subscribe); static Map<String, Map<String, String>> revertRegister(Map<String, Map<String, String>> register); static Map<String, String> revertSubscribe(Map<String, String> subscribe); static Map<String, Map<String, String>> revertNotify(Map<String, Map<String, String>> notify); static List<String> revertForbid(List<String> forbid, Set<URL> subscribed); static URL getEmptyUrl(String service, String category); static boolean isMatchCategory(String category, String categories); static boolean isMatch(URL consumerUrl, URL providerUrl); static boolean isMatchGlobPattern(String pattern, String value, URL param); static boolean isMatchGlobPattern(String pattern, String value); static boolean isServiceKeyMatch(URL pattern, URL value); static List<URL> classifyUrls(List<URL> urls, Predicate<URL> predicate); static boolean isConfigurator(URL url); static boolean isRoute(URL url); static boolean isProvider(URL url);  }### Answer:
@Test public void testIsMatchGlobPattern() throws Exception { assertTrue(UrlUtils.isMatchGlobPattern("*", "value")); assertTrue(UrlUtils.isMatchGlobPattern("", null)); assertFalse(UrlUtils.isMatchGlobPattern("", "value")); assertTrue(UrlUtils.isMatchGlobPattern("value", "value")); assertTrue(UrlUtils.isMatchGlobPattern("v*", "value")); assertTrue(UrlUtils.isMatchGlobPattern("*e", "value")); assertTrue(UrlUtils.isMatchGlobPattern("v*e", "value")); assertTrue(UrlUtils.isMatchGlobPattern("$key", "value", URL.valueOf("dubbo: }