WheelOdometrySensorConfigurationSerializationTest.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  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. EXPECT_STREQ(buffer.GetString(), expectedOutput);
  65. }
  66. // Store test for the new schema, where there is a configuration class.
  67. TEST_F(ROS2ControllersTestFixture, Deserialize_WhenNewSchemaProvided_StoresSuccessfully)
  68. {
  69. ROS2Controllers::ROS2WheelOdometryComponent wheelOdometryComponent;
  70. rapidjson::Document jsonDocument(rapidjson::kObjectType);
  71. jsonDocument.Parse(R"({
  72. "Odometry configuration": {
  73. "Twist covariance": {
  74. "Linear covariance": [
  75. 123.0,
  76. 456.0,
  77. 789.0
  78. ],
  79. "Angular covariance": [
  80. 987.0,
  81. 654.0,
  82. 321.0
  83. ]
  84. },
  85. "Pose covariance": {
  86. "Linear covariance": [
  87. 321.0,
  88. 654.0,
  89. 987.0
  90. ],
  91. "Angular covariance": [
  92. 789.0,
  93. 456.0,
  94. 123.0
  95. ]
  96. }
  97. }
  98. })");
  99. AZ::JsonDeserializerSettings settings;
  100. auto storeResult = AZ::JsonSerialization::Load(wheelOdometryComponent, jsonDocument, settings);
  101. EXPECT_EQ(storeResult.GetOutcome(), AZ::JsonSerializationResult::Outcomes::PartialDefaults);
  102. rapidjson::Document document(rapidjson::kObjectType);
  103. document.Parse("{}");
  104. AZ::JsonSerializerSettings serializerSettings;
  105. serializerSettings.m_keepDefaults = true;
  106. AZ::JsonSerializationResult::ResultCode resultCode =
  107. AZ::JsonSerialization::Store(document, document.GetAllocator(), wheelOdometryComponent, serializerSettings);
  108. EXPECT_EQ(resultCode.GetOutcome(), AZ::JsonSerializationResult::Outcomes::Success);
  109. rapidjson::StringBuffer buffer;
  110. rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
  111. document.Accept(writer);
  112. const char* expectedOutput =
  113. 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]}}})~";
  114. EXPECT_STREQ(buffer.GetString(), expectedOutput);
  115. }
  116. } // namespace UnitTest