fuzzy_fastboot: Add tests for fetch:vendor_boot
Test: run test against bootloader Test: run test against fastbootd Bug: 173654501 Change-Id: Ia3182b4f4390048139d2cafe9b1654b6fb92eb7b
This commit is contained in:
parent
2a7a14bfc4
commit
f09c1efd0a
1 changed files with 39 additions and 0 deletions
|
@ -43,8 +43,10 @@
|
|||
#include <thread>
|
||||
#include <vector>
|
||||
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/parseint.h>
|
||||
#include <android-base/stringprintf.h>
|
||||
#include <android-base/strings.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <sparse/sparse.h>
|
||||
|
||||
|
@ -669,6 +671,33 @@ TEST_F(UnlockPermissions, DownloadFlash) {
|
|||
EXPECT_EQ(fb->Partitions(&parts), SUCCESS) << "getvar:all failed in unlocked mode";
|
||||
}
|
||||
|
||||
// If the implementation supports getvar:max-fetch-size, it must also support fetch:vendor_boot*.
|
||||
TEST_F(UnlockPermissions, FetchVendorBoot) {
|
||||
std::string var;
|
||||
uint64_t fetch_size;
|
||||
if (fb->GetVar("max-fetch-size", &var) != SUCCESS) {
|
||||
GTEST_SKIP() << "This test is skipped because fetch is not supported.";
|
||||
}
|
||||
ASSERT_FALSE(var.empty());
|
||||
ASSERT_TRUE(android::base::ParseUint(var, &fetch_size)) << var << " is not an integer";
|
||||
std::vector<std::tuple<std::string, uint64_t>> parts;
|
||||
EXPECT_EQ(fb->Partitions(&parts), SUCCESS) << "getvar:all failed";
|
||||
for (const auto& [partition, partition_size] : parts) {
|
||||
if (!android::base::StartsWith(partition, "vendor_boot")) continue;
|
||||
TemporaryFile fetched;
|
||||
|
||||
uint64_t offset = 0;
|
||||
while (offset < partition_size) {
|
||||
uint64_t chunk_size = std::min(fetch_size, partition_size - offset);
|
||||
auto ret = fb->FetchToFd(partition, fetched.fd, offset, chunk_size);
|
||||
ASSERT_EQ(fastboot::RetCode::SUCCESS, ret)
|
||||
<< "Unable to fetch " << partition << " (offset=" << offset
|
||||
<< ", size=" << chunk_size << ")";
|
||||
offset += chunk_size;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(LockPermissions, DownloadFlash) {
|
||||
std::vector<char> buf{'a', 'o', 's', 'p'};
|
||||
EXPECT_EQ(fb->Download(buf), SUCCESS) << "Download failed in locked mode";
|
||||
|
@ -730,6 +759,16 @@ TEST_F(LockPermissions, Boot) {
|
|||
EXPECT_GT(resp.size(), 0) << "No error message was returned by device after FAIL";
|
||||
}
|
||||
|
||||
TEST_F(LockPermissions, FetchVendorBoot) {
|
||||
std::vector<std::tuple<std::string, uint64_t>> parts;
|
||||
EXPECT_EQ(fb->Partitions(&parts), SUCCESS) << "getvar:all failed";
|
||||
for (const auto& [partition, _] : parts) {
|
||||
TemporaryFile fetched;
|
||||
ASSERT_EQ(fb->FetchToFd(partition, fetched.fd, 0, 0), DEVICE_FAIL)
|
||||
<< "fetch:" << partition << ":0:0 did not fail in locked mode";
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(Fuzz, DownloadSize) {
|
||||
std::string var;
|
||||
EXPECT_EQ(fb->GetVar("max-download-size", &var), SUCCESS) << "getvar:max-download-size failed";
|
||||
|
|
Loading…
Reference in a new issue