### Question:
PropertyHelper { public static Set<String> getCategories(Set<String> propertyIds) { Set<String> categories = new HashSet<>(); for (String property : propertyIds) { String category = PropertyHelper.getPropertyCategory(property); while (category != null) { categories.add(category); category = PropertyHelper.getPropertyCategory(category); } } return categories; }  static String getPropertyId(String category, String name); static Set<String> getPropertyIds(Resource.Type resourceType); static void setPropertyIds(Resource.Type resourceType, Set<String> propertyIds); static Set<String> getPropertyIds(Map<String, Map<String, PropertyInfo>> componentPropertyInfoMap ); static Map<String, Map<String, PropertyInfo>> getMetricPropertyIds(Resource.Type resourceType); static Map<String, Map<String, PropertyInfo>> getSQLServerPropertyIds(Resource.Type resourceType); static Map<String, Map<String, PropertyInfo>> getJMXPropertyIds(Resource.Type resourceType); static Map<Resource.Type, String> getKeyPropertyIds(Resource.Type resourceType); static void setKeyPropertyIds(Resource.Type resourceType, Map<Resource.Type, String> keyPropertyKeys); static String getPropertyName(String absProperty); static String getPropertyCategory(String property); static Set<String> getCategories(Set<String> propertyIds); static boolean containsProperty(Set<String> propertyIds, String propertyId); static boolean containsArguments(String propertyId); static Set<String> getAssociatedPropertyIds(Request request); static Map<String, Object> getProperties(Resource resource); static Request getCreateRequest(Set<Map<String, Object>> properties,
                                         Map<String, String> requestInfoProperties); static Request getReadRequest(Set<String> propertyIds); static Request getReadRequest(Set<String> propertyIds, Map<String,
      TemporalInfo> mapTemporalInfo); static Request getReadRequest(Set<String> propertyIds,
      Map<String, String> requestInfoProperties,
      Map<String, TemporalInfo> mapTemporalInfo, PageRequest pageRequest,
      SortRequest sortRequest); static Request getReadRequest(String ... propertyIds); static Request getUpdateRequest(Map<String, Object> properties,
                                         Map<String, String> requestInfoProperties); static void updateMetricsWithAggregateFunctionSupport(Map<String, Map<String, PropertyInfo>> metrics); static boolean hasAggregateFunctionSuffix(String propertyId); static Map<String, org.apache.ambari.server.state.stack.Metric> processRpcMetricDefinition(String metricType,
      String componentName, String propertyId, org.apache.ambari.server.state.stack.Metric metric); static final char EXTERNAL_PATH_SEP; static final List<String> AGGREGATE_FUNCTION_IDENTIFIERS; }### Answer:
@Test public void testGetCategories() { String propertyId = "metrics/yarn/Queue/$1.replaceAll(\",q(\\d+)=\",\"/\").substring(1)/AppsRunning"; Set<String> categories = PropertyHelper.getCategories(Collections.singleton(propertyId)); Assert.assertTrue(categories.contains("metrics/yarn/Queue/$1")); Assert.assertTrue(categories.contains("metrics/yarn/Queue")); Assert.assertTrue(categories.contains("metrics/yarn")); Assert.assertTrue(categories.contains("metrics")); String propertyId2 = "foo/bar/baz"; Set<String> propertyIds = new HashSet<>(); propertyIds.add(propertyId); propertyIds.add(propertyId2); categories = PropertyHelper.getCategories(propertyIds); Assert.assertTrue(categories.contains("metrics/yarn/Queue/$1")); Assert.assertTrue(categories.contains("metrics/yarn/Queue")); Assert.assertTrue(categories.contains("metrics/yarn")); Assert.assertTrue(categories.contains("metrics")); Assert.assertTrue(categories.contains("foo/bar")); Assert.assertTrue(categories.contains("foo")); }