Add OpenCowReader interface method to dynamic partition control
Test: treehugger
Change-Id: I393fc36372f9e979da1a6c7e49c7782a7372a5b9
diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc
index d296c53..7ccc39a 100644
--- a/aosp/dynamic_partition_control_android.cc
+++ b/aosp/dynamic_partition_control_android.cc
@@ -1256,6 +1256,18 @@
return snapshot_->OpenSnapshotWriter(params, std::move(source_path));
} // namespace chromeos_update_engine
+FileDescriptorPtr DynamicPartitionControlAndroid::OpenCowReader(
+ const std::string& unsuffixed_partition_name,
+ const std::optional<std::string>& source_path,
+ bool is_append) {
+ auto cow_writer =
+ OpenCowWriter(unsuffixed_partition_name, source_path, is_append);
+ if (cow_writer == nullptr) {
+ return nullptr;
+ }
+ return cow_writer->OpenReader();
+}
+
std::optional<base::FilePath> DynamicPartitionControlAndroid::GetSuperDevice() {
std::string device_dir_str;
if (!GetDeviceDir(&device_dir_str)) {
diff --git a/aosp/dynamic_partition_control_android.h b/aosp/dynamic_partition_control_android.h
index a4064e9..a2a42cc 100644
--- a/aosp/dynamic_partition_control_android.h
+++ b/aosp/dynamic_partition_control_android.h
@@ -89,6 +89,9 @@
const std::string& unsuffixed_partition_name,
const std::optional<std::string>& source_path,
bool is_append) override;
+ FileDescriptorPtr OpenCowReader(const std::string& unsuffixed_partition_name,
+ const std::optional<std::string>&,
+ bool is_append = false) override;
bool UnmapAllPartitions() override;
diff --git a/aosp/mock_dynamic_partition_control.h b/aosp/mock_dynamic_partition_control.h
index df7208e..d281803 100644
--- a/aosp/mock_dynamic_partition_control.h
+++ b/aosp/mock_dynamic_partition_control.h
@@ -25,6 +25,7 @@
#include <libsnapshot/cow_writer.h>
#include <libsnapshot/snapshot_writer.h>
+#include "payload_consumer/file_descriptor.h"
#include "update_engine/aosp/dynamic_partition_control_android.h"
#include "update_engine/common/boot_control_interface.h"
#include "update_engine/common/dynamic_partition_control_interface.h"
@@ -90,6 +91,12 @@
const std::optional<std::string>& source_path,
bool is_append),
(override));
+ MOCK_METHOD(FileDescriptorPtr,
+ OpenCowReader,
+ (const std::string& unsuffixed_partition_name,
+ const std::optional<std::string>& source_path,
+ bool is_append),
+ (override));
MOCK_METHOD(bool, MapAllPartitions, (), (override));
MOCK_METHOD(bool, UnmapAllPartitions, (), (override));
diff --git a/common/dynamic_partition_control_interface.h b/common/dynamic_partition_control_interface.h
index c8a2274..a2ebfc6 100644
--- a/common/dynamic_partition_control_interface.h
+++ b/common/dynamic_partition_control_interface.h
@@ -154,6 +154,10 @@
const std::string& unsuffixed_partition_name,
const std::optional<std::string>&,
bool is_append = false) = 0;
+ virtual FileDescriptorPtr OpenCowReader(
+ const std::string& unsuffixed_partition_name,
+ const std::optional<std::string>&,
+ bool is_append = false) = 0;
// Create virtual block devices for all partitions.
virtual bool MapAllPartitions() = 0;
diff --git a/common/dynamic_partition_control_stub.cc b/common/dynamic_partition_control_stub.cc
index cfc9e2e..31975b3 100644
--- a/common/dynamic_partition_control_stub.cc
+++ b/common/dynamic_partition_control_stub.cc
@@ -96,6 +96,13 @@
return nullptr;
}
+FileDescriptorPtr DynamicPartitionControlStub::OpenCowReader(
+ const std::string& unsuffixed_partition_name,
+ const std::optional<std::string>&,
+ bool /*is_append */) {
+ return nullptr;
+}
+
bool DynamicPartitionControlStub::MapAllPartitions() {
return false;
}
diff --git a/common/dynamic_partition_control_stub.h b/common/dynamic_partition_control_stub.h
index 1fc8a35..94540f4 100644
--- a/common/dynamic_partition_control_stub.h
+++ b/common/dynamic_partition_control_stub.h
@@ -62,6 +62,9 @@
const std::string& unsuffixed_partition_name,
const std::optional<std::string>&,
bool is_append) override;
+ FileDescriptorPtr OpenCowReader(const std::string& unsuffixed_partition_name,
+ const std::optional<std::string>&,
+ bool is_append = false) override;
bool MapAllPartitions() override;
bool UnmapAllPartitions() override;