WheelOdometrySensorConfigurationSerializationTest.cpp 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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 <AzCore/UnitTest/TestTypes.h>
  9. #include <AzTest/AzTest.h>
  10. #include <Sensors/ROS2WheelOdometrySensorComponent.h>
  11. #include <rapidjson/stringbuffer.h>
  12. #include <rapidjson/writer.h>
  13. namespace UnitTest
  14. {
  15. class ROS2ControllersTestFixture : public ::testing::Test
  16. {
  17. };
  18. // Store test for the old schema, where there is no configuration class.
  19. TEST_F(ROS2ControllersTestFixture, Deserialize_WhenOldSchemaProvided_StoresSuccessfully)
  20. {
  21. ROS2Controllers::ROS2WheelOdometryComponent wheelOdometryComponent;
  22. rapidjson::Document jsonDocument(rapidjson::kObjectType);
  23. jsonDocument.Parse(R"({
  24. "Twist covariance": {
  25. "Linear covariance": [
  26. 123.0,
  27. 456.0,
  28. 789.0
  29. ],
  30. "Angular covariance": [
  31. 987.0,
  32. 654.0,
  33. 321.0
  34. ]
  35. },
  36. "Pose covariance": {
  37. "Linear covariance": [
  38. 321.0,
  39. 654.0,
  40. 987.0
  41. ],
  42. "Angular covariance": [
  43. 789.0,
  44. 456.0,
  45. 123.0
  46. ]
  47. }
  48. })");
  49. AZ::JsonDeserializerSettings settings;
  50. auto storeResult = AZ::JsonSerialization::Load(wheelOdometryComponent, jsonDocument, settings);
  51. EXPECT_EQ(storeResult.GetOutcome(), AZ::JsonSerializationResult::Outcomes::PartialDefaults);
  52. rapidjson::Document document(rapidjson::kObjectType);
  53. document.Parse("{}");
  54. AZ::JsonSerializerSettings serializerSettings;
  55. serializerSettings.m_keepDefaults = true;
  56. AZ::JsonSerializationResult::ResultCode resultCode =
  57. AZ::JsonSerialization::Store(document, document.GetAllocator(), wheelOdometryComponent, serializerSettings);
  58. EXPECT_EQ(resultCode.GetOutcome(), AZ::JsonSerializationResult::Outcomes::Success);
  59. rapidjson::StringBuffer buffer;
  60. rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
  61. document.Accept(writer);
  62. const char* expectedOutput =
  63. R"~({"Id":0,"SensorConfiguration":{"Visualize":true,"Publishing Enabled":true,"Frequency (HZ)":10.0,"Publishers":{"nav_msgs::msg::Odometry":{"Type":"nav_msgs::msg::Odometry","Topic":"odom","QoS":{"Reliability":2,"Durability":2,"Depth":5}}}},"Odometry configuration":{"Pose covariance":{"Linear covariance":[321.0,654.0,987.0],"Angular covariance":[789.0,456.0,123.0]},"Twist covariance":{"Linear covariance":[123.0,456.0,789.0],"Angular covariance":[987.0,654.0,321.0]}}})~";
  64. // Parse both JSONs into RapidJSON documents
  65. rapidjson::Document actualJson;
  66. actualJson.Parse(buffer.GetString());
  67. rapidjson::Document expectedJson;
  68. expectedJson.Parse(expectedOutput);
  69. // Compare the documents
  70. EXPECT_TRUE(actualJson == expectedJson);
  71. }
  72. // Store test for the new schema, where there is a configuration class.
  73. TEST_F(ROS2ControllersTestFixture, Deserialize_WhenNewSchemaProvided_StoresSuccessfully)
  74. {
  75. ROS2Controllers::ROS2WheelOdometryComponent wheelOdometryComponent;
  76. rapidjson::Document jsonDocument(rapidjson::kObjectType);
  77. jsonDocument.Parse(R"({
  78. "Odometry configuration": {
  79. "Twist covariance": {
  80. "Linear covariance": [
  81. 123.0,
  82. 456.0,
  83. 789.0
  84. ],
  85. "Angular covariance": [
  86. 987.0,
  87. 654.0,
  88. 321.0
  89. ]
  90. },
  91. "Pose covariance": {
  92. "Linear covariance": [
  93. 321.0,
  94. 654.0,
  95. 987.0
  96. ],
  97. "Angular covariance": [
  98. 789.0,
  99. 456.0,
  100. 123.0
  101. ]
  102. }
  103. }
  104. })");
  105. AZ::JsonDeserializerSettings settings;
  106. auto storeResult = AZ::JsonSerialization::Load(wheelOdometryComponent, jsonDocument, settings);
  107. EXPECT_EQ(storeResult.GetOutcome(), AZ::JsonSerializationResult::Outcomes::PartialDefaults);
  108. rapidjson::Document document(rapidjson::kObjectType);
  109. document.Parse("{}");
  110. AZ::JsonSerializerSettings serializerSettings;
  111. serializerSettings.m_keepDefaults = true;
  112. AZ::JsonSerializationResult::ResultCode resultCode =
  113. AZ::JsonSerialization::Store(document, document.GetAllocator(), wheelOdometryComponent, serializerSettings);
  114. EXPECT_EQ(resultCode.GetOutcome(), AZ::JsonSerializationResult::Outcomes::Success);
  115. rapidjson::StringBuffer buffer;
  116. rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
  117. document.Accept(writer);
  118. const char* expectedOutput =
  119. R"~({"Id":0,"SensorConfiguration":{"Visualize":true,"Publishing Enabled":true,"Frequency (HZ)":10.0,"Publishers":{"nav_msgs::msg::Odometry":{"Type":"nav_msgs::msg::Odometry","Topic":"odom","QoS":{"Reliability":2,"Durability":2,"Depth":5}}}},"Odometry configuration":{"Pose covariance":{"Linear covariance":[321.0,654.0,987.0],"Angular covariance":[789.0,456.0,123.0]},"Twist covariance":{"Linear covariance":[123.0,456.0,789.0],"Angular covariance":[987.0,654.0,321.0]}}})~";
  120. // Parse both JSONs into RapidJSON documents
  121. rapidjson::Document actualJson;
  122. actualJson.Parse(buffer.GetString());
  123. rapidjson::Document expectedJson;
  124. expectedJson.Parse(expectedOutput);
  125. // Compare the documents
  126. EXPECT_TRUE(actualJson == expectedJson);
  127. }
  128. } // namespace UnitTest