PageRenderTime 45ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/atlassian-dropwizard-metrics/src/test/java/com/atlassian/util/profiling/dropwizard/util/GroupingObjectNameFactoryTest.java

https://bitbucket.org/atlassian/atlassian-profiling
Java | 108 lines | 79 code | 27 blank | 2 comment | 1 complexity | 56ce256bbad385962bc2df86c2b85a5c MD5 | raw file
  1. package com.atlassian.util.profiling.dropwizard.util;
  2. import org.junit.Test;
  3. import javax.management.ObjectName;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import static com.atlassian.util.profiling.dropwizard.util.GroupingObjectNameFactory.CATEGORY_BASE_KEY;
  7. import static com.atlassian.util.profiling.dropwizard.util.GroupingObjectNameFactory.METRICS_PROPERTY;
  8. import static com.atlassian.util.profiling.dropwizard.util.GroupingObjectNameFactory.NAME_KEY;
  9. import static com.atlassian.util.profiling.dropwizard.util.GroupingObjectNameFactory.NAME_SPLIT_DELIMITER;
  10. import static com.atlassian.util.profiling.dropwizard.util.GroupingObjectNameFactory.TYPE_KEY;
  11. import static com.atlassian.util.profiling.dropwizard.util.GroupingObjectNameFactory.buildCategoryKey;
  12. import static org.junit.Assert.assertEquals;
  13. public class GroupingObjectNameFactoryTest {
  14. private static final String SIMPLE_INSTRUMENT_TYPE = "aType";
  15. private static final String SIMPLE_DOMAIN = "aDomain";
  16. private static final String SIMPLE_NAME = "aName";
  17. @Test
  18. public void createName_should_setMetricsType() {
  19. final ObjectName simpleObjectName = buildSimpleObjectName();
  20. assertEquals(METRICS_PROPERTY, simpleObjectName.getKeyProperty(TYPE_KEY));
  21. }
  22. @Test
  23. public void createName_should_notCareAboutInstrumentType() {
  24. final String[] instrumentTypes = {"gauges", "counters", "histograms", "meters", "timers", "mcb", "scott", "qwerty"};
  25. final GroupingObjectNameFactory objectNameFactory = new GroupingObjectNameFactory();
  26. final ObjectName simpleObjectName = buildSimpleObjectName();
  27. for (String instrumentType : instrumentTypes) {
  28. assertEquals(simpleObjectName, objectNameFactory.createName(instrumentType, SIMPLE_DOMAIN, SIMPLE_NAME));
  29. }
  30. }
  31. @Test
  32. public void createName_should_splitNameIntoATag() {
  33. final String nameWithOneCategory = joinWithNameSplitDelimiter("aCategory", SIMPLE_NAME);
  34. final ObjectName objectNameWithCategories = buildObjectNameWithProvidedName(nameWithOneCategory);
  35. assertEquals(SIMPLE_NAME, objectNameWithCategories.getKeyProperty(NAME_KEY));
  36. }
  37. @Test
  38. public void createName_should_splitCategoriesIntoTags() {
  39. final String firstCategory = "firstCategory";
  40. final String secondCategory = "secondCategory";
  41. final String nameWithTwoCategories = joinWithNameSplitDelimiter(firstCategory, secondCategory, SIMPLE_NAME);
  42. final String firstCategoryKey = buildCategoryKey(0);
  43. final String secondCategoryKey = buildCategoryKey(1);
  44. final ObjectName objectNameWithCategories = buildObjectNameWithProvidedName(nameWithTwoCategories);
  45. assertEquals(firstCategory, objectNameWithCategories.getKeyProperty(firstCategoryKey));
  46. assertEquals(secondCategory, objectNameWithCategories.getKeyProperty(secondCategoryKey));
  47. }
  48. @Test
  49. public void createName_should_NotSplitDomain() {
  50. final String complexDomain = joinWithNameSplitDelimiter("a", "name");
  51. final GroupingObjectNameFactory objectNameFactory = new GroupingObjectNameFactory();
  52. final ObjectName objectNameWithCategories = objectNameFactory
  53. .createName(SIMPLE_INSTRUMENT_TYPE, complexDomain, SIMPLE_NAME);
  54. assertEquals(complexDomain, objectNameWithCategories.getDomain());
  55. }
  56. @Test
  57. public void buildCategoryKey_should_handleUpToAHundredCategories() {
  58. final List<String> expectedInOrder = new ArrayList<>();
  59. expectedInOrder.add(CATEGORY_BASE_KEY + "00");
  60. expectedInOrder.add(CATEGORY_BASE_KEY + "01");
  61. expectedInOrder.add(CATEGORY_BASE_KEY + "10");
  62. final List<String> actualOrderCategoryOrder = new ArrayList<>();
  63. actualOrderCategoryOrder.add(buildCategoryKey(0));
  64. actualOrderCategoryOrder.add(buildCategoryKey(1));
  65. actualOrderCategoryOrder.add(buildCategoryKey(10));
  66. // Lexicographic sorting would put "category10" before "category1", we want to protect against that
  67. actualOrderCategoryOrder.sort(String::compareTo);
  68. assertEquals(expectedInOrder, actualOrderCategoryOrder);
  69. }
  70. // TESTING HELPER METHODS
  71. private static ObjectName buildSimpleObjectName() {
  72. return buildObjectNameWithProvidedName(SIMPLE_NAME);
  73. }
  74. private static ObjectName buildObjectNameWithProvidedName(final String name) {
  75. return new GroupingObjectNameFactory()
  76. .createName(SIMPLE_INSTRUMENT_TYPE, SIMPLE_DOMAIN, name);
  77. }
  78. private static String joinWithNameSplitDelimiter(final String... values) {
  79. return String.join(NAME_SPLIT_DELIMITER, values);
  80. }
  81. }