| // Copyright 2020 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ash/power/ml/smart_dim/ml_agent_util.h" |
| |
| #include "base/containers/flat_map.h" |
| #include "base/files/file_path.h" |
| #include "base/files/file_util.h" |
| #include "base/json/json_reader.h" |
| #include "base/path_service.h" |
| #include "chromeos/test/chromeos_test_utils.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace ash { |
| namespace power { |
| namespace ml { |
| |
| namespace { |
| std::string ReadMetadataFromTestData(const std::string& filename) { |
| base::FilePath json_path; |
| std::string json_string; |
| |
| CHECK( |
| chromeos::test_utils::GetTestDataPath("smart_dim", filename, &json_path)); |
| CHECK(base::ReadFileToString(json_path, &json_string)); |
| return json_string; |
| } |
| } // namespace |
| |
| // Invalid json file that contains 2 input nodes. |
| TEST(SmartDimMlAgentUtilTest, ParseInvalidMetadata) { |
| const std::string json_string = |
| ReadMetadataFromTestData("invalid_model_metadata.json"); |
| ASSERT_TRUE(json_string.size()); |
| |
| std::string metrics_model_name; |
| double threshold; |
| size_t expected_feature_size; |
| base::flat_map<std::string, int> inputs; |
| base::flat_map<std::string, int> outputs; |
| |
| const std::optional<base::Value> root = base::JSONReader::Read(json_string); |
| EXPECT_FALSE(ParseMetaInfoFromJsonObject(root.value(), &metrics_model_name, |
| &threshold, &expected_feature_size, |
| &inputs, &outputs)); |
| EXPECT_EQ(expected_feature_size, 0LU); |
| EXPECT_EQ(metrics_model_name, ""); |
| EXPECT_DOUBLE_EQ(threshold, 0.0); |
| EXPECT_EQ(inputs.size(), 0LU); |
| EXPECT_EQ(outputs.size(), 0LU); |
| } |
| |
| TEST(SmartDimMlAgentUtilTest, ParseValidMetadata) { |
| const std::string json_string = |
| ReadMetadataFromTestData("valid_model_metadata.json"); |
| ASSERT_TRUE(json_string.size()); |
| |
| std::string metrics_model_name; |
| double threshold; |
| size_t expected_feature_size; |
| base::flat_map<std::string, int> inputs; |
| base::flat_map<std::string, int> outputs; |
| |
| const std::optional<base::Value> root = base::JSONReader::Read(json_string); |
| EXPECT_TRUE(ParseMetaInfoFromJsonObject(root.value(), &metrics_model_name, |
| &threshold, &expected_feature_size, |
| &inputs, &outputs)); |
| EXPECT_EQ(expected_feature_size, 343LU); |
| EXPECT_EQ(metrics_model_name, "SmartDimModel"); |
| EXPECT_DOUBLE_EQ(threshold, 0.7); |
| EXPECT_EQ(inputs, (base::flat_map<std::string, int>{{"input", 3}})); |
| EXPECT_EQ(outputs, (base::flat_map<std::string, int>{{"output", 5}})); |
| } |
| |
| } // namespace ml |
| } // namespace power |
| } // namespace ash |