MetricsEventTest.cpp 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <AWSMetricsConstant.h>
  9. #include <Framework/JsonWriter.h>
  10. #include <MetricsEvent.h>
  11. #include <AzCore/UnitTest/TestTypes.h>
  12. namespace AWSMetrics
  13. {
  14. class MetricsEventTest
  15. : public UnitTest::LeakDetectionFixture
  16. {
  17. public:
  18. static constexpr int NumTestMetrics = 10;
  19. static const char* const AttrName;
  20. static const char* const AttrValue;
  21. AZStd::vector<MetricsAttribute> GetRequiredMetricsAttributes()
  22. {
  23. AZStd::vector<MetricsAttribute> result;
  24. result.emplace_back(MetricsAttribute(AwsMetricsAttributeKeyClientId, "0.0.0.0-{00000000-0000-1000-A000-000000000000}"));
  25. result.emplace_back(MetricsAttribute(AwsMetricsAttributeKeyEventId, "{00000000-0000-1000-A000-000000000000}"));
  26. result.emplace_back(MetricsAttribute(AwsMetricsAttributeKeyEventName, "test_event"));
  27. result.emplace_back(MetricsAttribute(AwsMetricsAttributeKeyEventTimestamp, "0000-00-00T00:00:00Z"));
  28. return AZStd::move(result);
  29. }
  30. };
  31. const char* const MetricsEventTest::AttrName = "name";
  32. const char* const MetricsEventTest::AttrValue = "value";
  33. TEST_F(MetricsEventTest, AddAttribute_SingleAttribute_Success)
  34. {
  35. MetricsEvent metrics;
  36. int numAttributes = metrics.GetNumAttributes();
  37. metrics.AddAttribute(MetricsAttribute(AttrName, AttrValue));
  38. ASSERT_EQ(metrics.GetNumAttributes(), numAttributes + 1);
  39. }
  40. TEST_F(MetricsEventTest, AddAttribute_DuplicateAttribute_Fail)
  41. {
  42. MetricsEvent metrics;
  43. int numAttributes = metrics.GetNumAttributes();
  44. metrics.AddAttribute(MetricsAttribute(AttrName, AttrValue));
  45. AZ_TEST_START_TRACE_SUPPRESSION;
  46. metrics.AddAttribute(MetricsAttribute(AttrName, AttrValue));
  47. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  48. ASSERT_EQ(metrics.GetNumAttributes(), numAttributes + 1);
  49. }
  50. TEST_F(MetricsEventTest, AddAttribute_NoAttributeName_Fail)
  51. {
  52. MetricsEvent metrics;
  53. int numAttributes = metrics.GetNumAttributes();
  54. AZ_TEST_START_TRACE_SUPPRESSION;
  55. metrics.AddAttribute(MetricsAttribute());
  56. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  57. ASSERT_EQ(metrics.GetNumAttributes(), numAttributes);
  58. }
  59. TEST_F(MetricsEventTest, SetAttributes_ListOfAttributes_Success)
  60. {
  61. MetricsEvent metrics;
  62. AZStd::vector<MetricsAttribute> attributes;
  63. for (int index = 0; index < NumTestMetrics; ++index)
  64. {
  65. attributes.emplace_back(MetricsAttribute(AZStd::string::format("%s%i", AttrName, index), AttrValue));
  66. }
  67. metrics.AddAttributes(attributes);
  68. ASSERT_EQ(metrics.GetNumAttributes(), NumTestMetrics);
  69. }
  70. TEST_F(MetricsEventTest, GetSizeInBytes_SingleAttribute_Success)
  71. {
  72. MetricsEvent metrics;
  73. MetricsAttribute attribute(AttrName, AttrValue);
  74. metrics.AddAttribute(attribute);
  75. ASSERT_EQ(metrics.GetSizeInBytes(), attribute.GetSizeInBytes());
  76. }
  77. TEST_F(MetricsEventTest, SerializeToJson_DefaultAndCustomAttributes_Success)
  78. {
  79. MetricsEvent metrics;
  80. metrics.AddAttribute(MetricsAttribute(AttrName, AttrValue));
  81. metrics.AddAttribute(MetricsAttribute(AwsMetricsAttributeKeyEventName, AttrValue));
  82. std::ostream stream(nullptr);
  83. AWSCore::JsonOutputStream jsonStream{ stream };
  84. AWSCore::JsonWriter writer{ jsonStream };
  85. ASSERT_TRUE(metrics.SerializeToJson(writer));
  86. }
  87. TEST_F(MetricsEventTest, ReadFromJson_DefaultAndCustomAttributes_Success)
  88. {
  89. MetricsEvent metrics;
  90. rapidjson::Document doc;
  91. rapidjson::Value metricsObjVal(rapidjson::kObjectType);
  92. metricsObjVal.AddMember(rapidjson::StringRef(AwsMetricsAttributeKeyEventName), rapidjson::StringRef(AttrValue), doc.GetAllocator());
  93. rapidjson::Value customEventDataObjVal(rapidjson::kObjectType);
  94. customEventDataObjVal.AddMember(rapidjson::StringRef(AttrName), rapidjson::StringRef(AttrValue), doc.GetAllocator());
  95. metricsObjVal.AddMember(rapidjson::Value(AwsMetricsAttributeKeyEventData, doc.GetAllocator()).Move(),
  96. customEventDataObjVal.Move(), doc.GetAllocator());
  97. ASSERT_TRUE(metrics.ReadFromJson(metricsObjVal));
  98. ASSERT_EQ(metrics.GetNumAttributes(), 2);
  99. }
  100. TEST_F(MetricsEventTest, ReadFromJson_InvalidJsonValue_Fail)
  101. {
  102. MetricsEvent metrics;
  103. rapidjson::Document doc;
  104. rapidjson::Value metricsObjVal(rapidjson::kNumberType);
  105. AZ_TEST_START_TRACE_SUPPRESSION;
  106. ASSERT_FALSE(metrics.ReadFromJson(metricsObjVal));
  107. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  108. }
  109. TEST_F(MetricsEventTest, ReadFromJson_InvalidEventData_Fail)
  110. {
  111. MetricsEvent metrics;
  112. rapidjson::Document doc;
  113. rapidjson::Value metricsObjVal(rapidjson::kObjectType);
  114. metricsObjVal.AddMember(rapidjson::StringRef(AwsMetricsAttributeKeyEventName), rapidjson::StringRef(AttrValue), doc.GetAllocator());
  115. rapidjson::Value customEventDataVal(rapidjson::kNumberType);
  116. metricsObjVal.AddMember(rapidjson::Value(AwsMetricsAttributeKeyEventData, doc.GetAllocator()).Move(),
  117. customEventDataVal.Move(), doc.GetAllocator());
  118. AZ_TEST_START_TRACE_SUPPRESSION;
  119. ASSERT_FALSE(metrics.ReadFromJson(metricsObjVal));
  120. AZ_TEST_STOP_TRACE_SUPPRESSION(1);
  121. }
  122. TEST_F(MetricsEventTest, ValidateAgainstSchema_InvalidMetricsAttributeFormat_Fail)
  123. {
  124. AZStd::vector<MetricsAttribute> metricsAttributes = GetRequiredMetricsAttributes();
  125. metricsAttributes[1].SetVal("InvalidClientId");
  126. MetricsEvent metrics;
  127. metrics.AddAttributes(metricsAttributes);
  128. ASSERT_FALSE(metrics.ValidateAgainstSchema());
  129. }
  130. TEST_F(MetricsEventTest, ValidateAgainstSchema_MissingRequiredMetricsAttribute_Fail)
  131. {
  132. AZStd::vector<MetricsAttribute> metricsAttributes = GetRequiredMetricsAttributes();
  133. metricsAttributes.pop_back();
  134. MetricsEvent metrics;
  135. metrics.AddAttributes(metricsAttributes);
  136. ASSERT_FALSE(metrics.ValidateAgainstSchema());
  137. }
  138. TEST_F(MetricsEventTest, ValidateAgainstSchema_ValidRequiredMetricsAttributes_Success)
  139. {
  140. AZStd::vector<MetricsAttribute> metricsAttributes = GetRequiredMetricsAttributes();
  141. MetricsEvent metrics;
  142. metrics.AddAttributes(metricsAttributes);
  143. ASSERT_TRUE(metrics.ValidateAgainstSchema());
  144. }
  145. }