Add IsDynamicPartition API to easily check if a partition is dynamic
Test: treehugger
Change-Id: I655e4d6114a25c58857679985cd5e08581c0faab
diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc
index 7ccc39a..ca12b3d 100644
--- a/aosp/dynamic_partition_control_android.cc
+++ b/aosp/dynamic_partition_control_android.cc
@@ -1283,4 +1283,14 @@
return snapshot_->MapAllSnapshots(kMapSnapshotTimeout);
}
+bool DynamicPartitionControlAndroid::IsDynamicPartition(
+ const std::string& partition_name) {
+ if (dynamic_partition_list_.empty() &&
+ GetDynamicPartitionsFeatureFlag().IsEnabled()) {
+ CHECK(ListDynamicPartitionsForSlot(source_slot_, &dynamic_partition_list_));
+ }
+ return std::find(dynamic_partition_list_.begin(),
+ dynamic_partition_list_.end(),
+ partition_name) != dynamic_partition_list_.end();
+}
} // namespace chromeos_update_engine
diff --git a/aosp/dynamic_partition_control_android.h b/aosp/dynamic_partition_control_android.h
index a2a42cc..4a2b114 100644
--- a/aosp/dynamic_partition_control_android.h
+++ b/aosp/dynamic_partition_control_android.h
@@ -95,6 +95,8 @@
bool UnmapAllPartitions() override;
+ bool IsDynamicPartition(const std::string& part_name) override;
+
protected:
// These functions are exposed for testing.
@@ -303,6 +305,7 @@
bool is_target_dynamic_ = false;
uint32_t source_slot_ = UINT32_MAX;
uint32_t target_slot_ = UINT32_MAX;
+ std::vector<std::string> dynamic_partition_list_;
DISALLOW_COPY_AND_ASSIGN(DynamicPartitionControlAndroid);
};
diff --git a/aosp/mock_dynamic_partition_control_android.h b/aosp/mock_dynamic_partition_control_android.h
index d281803..8d8ddb3 100644
--- a/aosp/mock_dynamic_partition_control_android.h
+++ b/aosp/mock_dynamic_partition_control_android.h
@@ -99,6 +99,7 @@
(override));
MOCK_METHOD(bool, MapAllPartitions, (), (override));
MOCK_METHOD(bool, UnmapAllPartitions, (), (override));
+ MOCK_METHOD(bool, IsDynamicPartition, (const std::string&), (override));
void set_fake_mapped_devices(const std::set<std::string>& fake) override {
DynamicPartitionControlAndroid::set_fake_mapped_devices(fake);
diff --git a/common/dynamic_partition_control_interface.h b/common/dynamic_partition_control_interface.h
index a2ebfc6..1362c19 100644
--- a/common/dynamic_partition_control_interface.h
+++ b/common/dynamic_partition_control_interface.h
@@ -159,6 +159,8 @@
const std::optional<std::string>&,
bool is_append = false) = 0;
+ virtual bool IsDynamicPartition(const std::string& part_name) = 0;
+
// Create virtual block devices for all partitions.
virtual bool MapAllPartitions() = 0;
// Unmap virtual block devices for all partitions.
diff --git a/common/dynamic_partition_control_stub.cc b/common/dynamic_partition_control_stub.cc
index 31975b3..2c6bb1b 100644
--- a/common/dynamic_partition_control_stub.cc
+++ b/common/dynamic_partition_control_stub.cc
@@ -111,4 +111,9 @@
return false;
}
+bool DynamicPartitionControlStub::IsDynamicPartition(
+ const std::string& part_name) {
+ return false;
+}
+
} // namespace chromeos_update_engine
diff --git a/common/dynamic_partition_control_stub.h b/common/dynamic_partition_control_stub.h
index 94540f4..0f428ab 100644
--- a/common/dynamic_partition_control_stub.h
+++ b/common/dynamic_partition_control_stub.h
@@ -68,6 +68,8 @@
bool MapAllPartitions() override;
bool UnmapAllPartitions() override;
+
+ bool IsDynamicPartition(const std::string& part_name) override;
};
} // namespace chromeos_update_engine