8ed9738b62
When using AVB, PRODUCT_SUPPORTS_VERITY is not set so check for BOARD_ENABLE_AVB as well. Also AVB sets up the root filesystem as 'vroot' so map that to 'system' since this is what is expected. Managed to test at least that the code is at least compiled in: $ fastboot --set-active=_a Setting current slot to 'a'... OKAY [ 0.023s] finished. total time: 0.023s $ fastboot reboot rebooting... finished. total time: 0.050s $ adb wait-for-device $ adb logcat |grep update_verifier 03-04 05:28:56.773 630 630 I /system/bin/update_verifier: Started with arg 1: nonencrypted 03-04 05:28:56.776 630 630 I /system/bin/update_verifier: Booting slot 0: isSlotMarkedSuccessful=0 03-04 05:28:56.776 630 630 W /system/bin/update_verifier: Failed to open /data/ota_package/care_map.txt: No such file or directory 03-04 05:28:56.788 630 630 I /system/bin/update_verifier: Marked slot 0 as booted successfully. 03-04 05:28:56.788 630 630 I /system/bin/update_verifier: Leaving update_verifier. Bug: None Test: Manually tested on device using AVB bootloader. Change-Id: I13c0fe1cc5d0f397e36f5e62fcc05c8dfee5fd85
83 lines
2.6 KiB
C++
83 lines
2.6 KiB
C++
/*
|
|
* Copyright (C) 2017 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 <string>
|
|
|
|
#include <android-base/file.h>
|
|
#include <android-base/test_utils.h>
|
|
#include <gtest/gtest.h>
|
|
#include <update_verifier/update_verifier.h>
|
|
|
|
class UpdateVerifierTest : public ::testing::Test {
|
|
protected:
|
|
void SetUp() override {
|
|
#if defined(PRODUCT_SUPPORTS_VERITY) || defined(BOARD_AVB_ENABLE)
|
|
verity_supported = true;
|
|
#else
|
|
verity_supported = false;
|
|
#endif
|
|
}
|
|
|
|
bool verity_supported;
|
|
};
|
|
|
|
TEST_F(UpdateVerifierTest, verify_image_no_care_map) {
|
|
// Non-existing care_map is allowed.
|
|
ASSERT_TRUE(verify_image("/doesntexist"));
|
|
}
|
|
|
|
TEST_F(UpdateVerifierTest, verify_image_smoke) {
|
|
// This test relies on dm-verity support.
|
|
if (!verity_supported) {
|
|
GTEST_LOG_(INFO) << "Test skipped on devices without dm-verity support.";
|
|
return;
|
|
}
|
|
|
|
// The care map file can have only two or four lines.
|
|
TemporaryFile temp_file;
|
|
std::string content = "system\n2,0,1";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(content, temp_file.path));
|
|
ASSERT_TRUE(verify_image(temp_file.path));
|
|
|
|
// Leading and trailing newlines should be accepted.
|
|
ASSERT_TRUE(android::base::WriteStringToFile("\n" + content + "\n\n", temp_file.path));
|
|
ASSERT_TRUE(verify_image(temp_file.path));
|
|
}
|
|
|
|
TEST_F(UpdateVerifierTest, verify_image_wrong_lines) {
|
|
// The care map file can have only two or four lines.
|
|
TemporaryFile temp_file;
|
|
ASSERT_FALSE(verify_image(temp_file.path));
|
|
|
|
ASSERT_TRUE(android::base::WriteStringToFile("line1", temp_file.path));
|
|
ASSERT_FALSE(verify_image(temp_file.path));
|
|
|
|
ASSERT_TRUE(android::base::WriteStringToFile("line1\nline2\nline3", temp_file.path));
|
|
ASSERT_FALSE(verify_image(temp_file.path));
|
|
}
|
|
|
|
TEST_F(UpdateVerifierTest, verify_image_malformed_care_map) {
|
|
// This test relies on dm-verity support.
|
|
if (!verity_supported) {
|
|
GTEST_LOG_(INFO) << "Test skipped on devices without dm-verity support.";
|
|
return;
|
|
}
|
|
|
|
TemporaryFile temp_file;
|
|
std::string content = "system\n2,1,0";
|
|
ASSERT_TRUE(android::base::WriteStringToFile(content, temp_file.path));
|
|
ASSERT_FALSE(verify_image(temp_file.path));
|
|
}
|