Merge "thermal: Add JSON Schema Checker" into main

This commit is contained in:
Will Song 2023-11-21 22:17:16 +00:00 committed by Android (Google) Code Review
commit 19746fbf8e
3 changed files with 174 additions and 0 deletions

61
thermal/Android.bp Normal file
View file

@ -0,0 +1,61 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package {
default_applicable_licenses: ["Android-Apache-2.0"],
}
cc_library {
name: "thermal-config-cpp",
proto: {
type: "lite",
export_proto_headers: true,
include_dirs: [
"external/protobuf/src",
"device/google/gs-common/thermal/thermal_hal/thermal_config_schemas"
],
}
}
cc_test_host {
name: "shusky-thermal-config-test",
srcs: [
"thermal_config_test.cpp",
],
static_libs: [
"libbase",
"libgmock",
"liblog",
"libjsoncpp",
"libjsonpbverify",
"libjsonpbparse",
"thermal_HAL_info_config_proto",
],
shared_libs: [
"libprotobuf-cpp-full",
],
cflags: [
"-Wall",
"-Werror",
"-Wno-unused-parameter",
],
data: [
"*.json"
],
test_suites: [
"general-tests",
],
}

View file

@ -0,0 +1,55 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include <android-base/file.h>
#include <gtest/gtest.h>
#include <jsonpb/json_schema_test.h>
#include "thermal_info_config_test.h"
using namespace ::android::jsonpb;
using ::android::base::GetExecutableDirectory;
namespace devices {
namespace shusky {
template <typename T>
JsonSchemaTestConfigFactory MakeTestParam(const std::string &path) {
return android::jsonpb::MakeTestParam<T>(GetExecutableDirectory() + path);
}
// Make test suite for thermal info config schema.
INSTANTIATE_TEST_SUITE_P(
ThermalSuite, ThermalInfoConfigTest,
::testing::Values(
MakeTestParam<ThermalConfig>("/thermal_info_config_husky.json"),
MakeTestParam<ThermalConfig>("/thermal_info_config_shiba.json"),
MakeTestParam<ThermalConfig>("/thermal_info_config_charge_husky.json"),
MakeTestParam<ThermalConfig>("/thermal_info_config_charge_shiba.json"),
MakeTestParam<ThermalConfig>("/thermal_info_config_ripcurrent.json"),
MakeTestParam<ThermalConfig>(
"/thermal_info_config_charge_ripcurrent.json")));
// Ignores a formatting check (b/c 0.0 != 0 textually)
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(JsonSchemaTest);
int main(int argc, char **argv) {
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
} // namespace shusky
} // namespace devices

View file

@ -0,0 +1,58 @@
/*
* Copyright (C) 2023 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#pragma once
#include <string>
#include <gmock/gmock.h>
#include <jsonpb/json_schema_test.h>
#include "thermal_info_config.pb.h"
namespace devices {
namespace shusky {
// JSON schema test wrapper.
class ThermalInfoConfigTest : public android::jsonpb::JsonSchemaTest {
public:
void SetUp() override {
JsonSchemaTest::SetUp();
thermalInfoConfig_ = static_cast<ThermalConfig *>(message());
}
ThermalConfig *thermalInfoConfig_ = nullptr;
};
// Individual test checking for sensor name and type as required fields.
TEST_P(ThermalInfoConfigTest, ThermalConfigRequiredFields) {
std::string error;
// Checks that no unknown fields are introduced.
EXPECT_TRUE(android::jsonpb::AllFieldsAreKnown(*object_, json_, &error))
<< "File: " << file_path_ << ": " << error;
// Check all Sensors have a Name and Type.
for (int i = 0; i < thermalInfoConfig_->sensors_size(); ++i) {
auto &&sensor = thermalInfoConfig_->sensors(i);
EXPECT_FALSE(sensor.name().empty())
<< "No name for sensor #" << i << " in " << file_path_;
EXPECT_FALSE(sensor.type().empty())
<< "No type for sensor " << sensor.name() << " in " << file_path_;
}
};
} // namespace shusky
} // namespace devices