/graylog2-server/src/test/java/org/graylog2/contentpacks/model/entities/references/ReferenceMapUtilsTest.java

https://github.com/Graylog2/graylog2-server · Java · 163 lines · 135 code · 12 blank · 16 comment · 0 complexity · cc6106519bedf376417085dc4ce8caf8 MD5 · raw file

  1. /*
  2. * Copyright (C) 2020 Graylog, Inc.
  3. *
  4. * This program is free software: you can redistribute it and/or modify
  5. * it under the terms of the Server Side Public License, version 1,
  6. * as published by MongoDB, Inc.
  7. *
  8. * This program is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * Server Side Public License for more details.
  12. *
  13. * You should have received a copy of the Server Side Public License
  14. * along with this program. If not, see
  15. * <http://www.mongodb.com/licensing/server-side-public-license>.
  16. */
  17. package org.graylog2.contentpacks.model.entities.references;
  18. import com.google.common.collect.ImmutableList;
  19. import com.google.common.collect.ImmutableMap;
  20. import org.junit.Test;
  21. import java.util.Collections;
  22. import java.util.Map;
  23. import static org.assertj.core.api.Assertions.assertThat;
  24. import static org.assertj.core.api.Assertions.assertThatThrownBy;
  25. public class ReferenceMapUtilsTest {
  26. @Test
  27. public void toReferenceMap() {
  28. final ImmutableMap<String, Object> map = ImmutableMap.<String, Object>builder()
  29. .put("boolean", true)
  30. .put("double", 2.0D)
  31. .put("float", 1.0f)
  32. .put("integer", 42)
  33. .put("long", 10000000000L)
  34. .put("string", "String")
  35. .put("enum", TestEnum.A)
  36. .put("list", ImmutableList.of(1, 2.0f, "3", true))
  37. .put("nestedList", ImmutableList.of(
  38. ImmutableMap.of( "k1", "v1", "k2", 2),
  39. ImmutableMap.of( "k1", "v2", "k2", 4)
  40. ))
  41. .put("map", ImmutableMap.of(
  42. "k1", "v1",
  43. "k2", 2))
  44. .build();
  45. final ReferenceMap expectedMap = new ReferenceMap(ImmutableMap.<String, Reference>builder()
  46. .put("boolean", ValueReference.of(true))
  47. .put("double", ValueReference.of(2.0D))
  48. .put("float", ValueReference.of(1.0f))
  49. .put("integer", ValueReference.of(42))
  50. .put("long", ValueReference.of(10000000000L))
  51. .put("string", ValueReference.of("String"))
  52. .put("enum", ValueReference.of(TestEnum.A))
  53. .put("list", new ReferenceList(ImmutableList.of(
  54. ValueReference.of(1),
  55. ValueReference.of(2.0f),
  56. ValueReference.of("3"),
  57. ValueReference.of(true))))
  58. .put("nestedList", new ReferenceList(ImmutableList.of(
  59. new ReferenceMap(ImmutableMap.of(
  60. "k1", ValueReference.of("v1"),
  61. "k2", ValueReference.of(2))),
  62. new ReferenceMap(ImmutableMap.of(
  63. "k1", ValueReference.of("v2"),
  64. "k2", ValueReference.of(4))))))
  65. .put("map", new ReferenceMap(ImmutableMap.of(
  66. "k1", ValueReference.of("v1"),
  67. "k2", ValueReference.of(2))))
  68. .build());
  69. final ReferenceMap valueReferenceMap = ReferenceMapUtils.toReferenceMap(map);
  70. assertThat(valueReferenceMap).isEqualTo(expectedMap);
  71. }
  72. @Test
  73. public void toValueMap() {
  74. final Map<String, ValueReference> parameters = ImmutableMap.<String, ValueReference>builder()
  75. .put("BOOLEAN", ValueReference.of(true))
  76. .put("FLOAT", ValueReference.of(1.0f))
  77. .put("INTEGER", ValueReference.of(42))
  78. .put("STRING", ValueReference.of("String"))
  79. .put("ENUM", ValueReference.of(TestEnum.A))
  80. .build();
  81. final ReferenceMap map = new ReferenceMap(ImmutableMap.<String, Reference>builder()
  82. .put("boolean", ValueReference.of(true))
  83. .put("param_boolean", ValueReference.createParameter("BOOLEAN"))
  84. .put("float", ValueReference.of(1.0f))
  85. .put("param_float", ValueReference.createParameter("FLOAT"))
  86. .put("integer", ValueReference.of(42))
  87. .put("param_integer", ValueReference.createParameter("INTEGER"))
  88. .put("string", ValueReference.of("String"))
  89. .put("param_string", ValueReference.createParameter("STRING"))
  90. .put("enum", ValueReference.of(TestEnum.A))
  91. .put("param_enum", ValueReference.createParameter("ENUM"))
  92. .put("list", new ReferenceList(ImmutableList.of(
  93. ValueReference.of(1),
  94. ValueReference.of(2.0f),
  95. ValueReference.of("3"),
  96. ValueReference.of(true),
  97. ValueReference.createParameter("STRING"))))
  98. .put("nestedList", new ReferenceList(ImmutableList.of(
  99. new ReferenceMap(ImmutableMap.of(
  100. "k1", ValueReference.of("v1"),
  101. "k2", ValueReference.of(2))),
  102. new ReferenceMap(ImmutableMap.of(
  103. "k1", ValueReference.of("v2"),
  104. "k2", ValueReference.of(4))))))
  105. .put("map", new ReferenceMap(ImmutableMap.of(
  106. "k1", ValueReference.of("v1"),
  107. "k2", ValueReference.of(2),
  108. "k3", ValueReference.createParameter("INTEGER"))))
  109. .build());
  110. final ImmutableMap<String, Object> expectedMap = ImmutableMap.<String, Object>builder()
  111. .put("boolean", true)
  112. .put("param_boolean", true)
  113. .put("float", 1.0f)
  114. .put("param_float", 1.0f)
  115. .put("integer", 42)
  116. .put("param_integer", 42)
  117. .put("string", "String")
  118. .put("param_string", "String")
  119. .put("enum", "A")
  120. .put("param_enum", "A")
  121. .put("list", ImmutableList.of(1, 2.0f, "3", true, "String"))
  122. .put("nestedList", ImmutableList.of(
  123. ImmutableMap.of( "k1", "v1", "k2", 2),
  124. ImmutableMap.of( "k1", "v2", "k2", 4)
  125. ))
  126. .put("map", ImmutableMap.of(
  127. "k1", "v1",
  128. "k2", 2,
  129. "k3", 42))
  130. .build();
  131. final Map<String, Object> valueReferenceMap = ReferenceMapUtils.toValueMap(map, parameters);
  132. assertThat(valueReferenceMap).isEqualTo(expectedMap);
  133. }
  134. @Test
  135. public void toValueMapWithMissingParameter() {
  136. final Map<String, ValueReference> parameters = Collections.emptyMap();
  137. final ReferenceMap map = new ReferenceMap(Collections.singletonMap("param", ValueReference.createParameter("STRING")));
  138. assertThatThrownBy(() -> ReferenceMapUtils.toValueMap(map, parameters))
  139. .isInstanceOf(IllegalArgumentException.class)
  140. .hasMessage("Missing parameter STRING");
  141. }
  142. @Test
  143. public void toValueMapWithCircularParameter() {
  144. final Map<String, ValueReference> parameters = Collections.singletonMap("STRING", ValueReference.createParameter("OTHER"));
  145. final ReferenceMap map = new ReferenceMap(Collections.singletonMap("param", ValueReference.createParameter("STRING")));
  146. assertThatThrownBy(() -> ReferenceMapUtils.toValueMap(map, parameters))
  147. .isInstanceOf(IllegalArgumentException.class)
  148. .hasMessage("Circular parameter STRING");
  149. }
  150. public enum TestEnum {A, B}
  151. }