DynamicPartitionsControl: Add Virtual A/B feature flag.
Test: unittest
Bug: 138816109
Change-Id: I7ae65ba0bf36a6ca5085bc4ec2c46245288b4703
diff --git a/boot_control_android_unittest.cc b/boot_control_android_unittest.cc
index 6f02a07..3b92191 100644
--- a/boot_control_android_unittest.cc
+++ b/boot_control_android_unittest.cc
@@ -62,6 +62,8 @@
ON_CALL(dynamicControl(), GetDynamicPartitionsFeatureFlag())
.WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
+ ON_CALL(dynamicControl(), GetVirtualAbFeatureFlag())
+ .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::NONE)));
ON_CALL(dynamicControl(), DeviceExists(_)).WillByDefault(Return(true));
ON_CALL(dynamicControl(), GetDeviceDir(_))
.WillByDefault(Invoke([](auto path) {
diff --git a/dynamic_partition_control_android.cc b/dynamic_partition_control_android.cc
index 5a2ccb1..b973232 100644
--- a/dynamic_partition_control_android.cc
+++ b/dynamic_partition_control_android.cc
@@ -53,6 +53,8 @@
constexpr char kUseDynamicPartitions[] = "ro.boot.dynamic_partitions";
constexpr char kRetrfoitDynamicPartitions[] =
"ro.boot.dynamic_partitions_retrofit";
+constexpr char kVirtualAbEnabled[] = "ro.virtual_ab.enabled";
+constexpr char kVirtualAbRetrofit[] = "ro.virtual_ab.retrofit";
constexpr uint64_t kMapTimeoutMillis = 1000;
DynamicPartitionControlAndroid::~DynamicPartitionControlAndroid() {
@@ -81,6 +83,10 @@
return GetFeatureFlag(kUseDynamicPartitions, kRetrfoitDynamicPartitions);
}
+FeatureFlag DynamicPartitionControlAndroid::GetVirtualAbFeatureFlag() {
+ return GetFeatureFlag(kVirtualAbEnabled, kVirtualAbRetrofit);
+}
+
bool DynamicPartitionControlAndroid::MapPartitionInternal(
const std::string& super_device,
const std::string& target_partition_name,
diff --git a/dynamic_partition_control_android.h b/dynamic_partition_control_android.h
index 062a2d1..d743e6e 100644
--- a/dynamic_partition_control_android.h
+++ b/dynamic_partition_control_android.h
@@ -30,6 +30,7 @@
DynamicPartitionControlAndroid() = default;
~DynamicPartitionControlAndroid();
FeatureFlag GetDynamicPartitionsFeatureFlag() override;
+ FeatureFlag GetVirtualAbFeatureFlag() override;
bool MapPartitionOnDeviceMapper(const std::string& super_device,
const std::string& target_partition_name,
uint32_t slot,
diff --git a/dynamic_partition_control_android_unittest.cc b/dynamic_partition_control_android_unittest.cc
index 5b3dfe3..1a3f664 100644
--- a/dynamic_partition_control_android_unittest.cc
+++ b/dynamic_partition_control_android_unittest.cc
@@ -44,6 +44,8 @@
ON_CALL(dynamicControl(), GetDynamicPartitionsFeatureFlag())
.WillByDefault(Return(FeatureFlag(FeatureFlag::Value::LAUNCH)));
+ ON_CALL(dynamicControl(), GetVirtualAbFeatureFlag())
+ .WillByDefault(Return(FeatureFlag(FeatureFlag::Value::NONE)));
ON_CALL(dynamicControl(), GetDeviceDir(_))
.WillByDefault(Invoke([](auto path) {
diff --git a/dynamic_partition_control_interface.h b/dynamic_partition_control_interface.h
index b3ce4ea..9c7b8d0 100644
--- a/dynamic_partition_control_interface.h
+++ b/dynamic_partition_control_interface.h
@@ -50,6 +50,9 @@
// NONE iff dynamic partitions is disabled on this device.
virtual FeatureFlag GetDynamicPartitionsFeatureFlag() = 0;
+ // Return the feature flags of Virtual A/B on this device.
+ virtual FeatureFlag GetVirtualAbFeatureFlag() = 0;
+
// Map logical partition on device-mapper.
// |super_device| is the device path of the physical partition ("super").
// |target_partition_name| is the identifier used in metadata; for example,
diff --git a/mock_dynamic_partition_control.h b/mock_dynamic_partition_control.h
index 26fc246..aab3c4d 100644
--- a/mock_dynamic_partition_control.h
+++ b/mock_dynamic_partition_control.h
@@ -49,6 +49,7 @@
uint32_t,
const BootControlInterface::PartitionMetadata&));
MOCK_METHOD1(GetSuperPartitionName, std::string(uint32_t));
+ MOCK_METHOD0(GetVirtualAbFeatureFlag, FeatureFlag());
};
class MockDynamicPartitionControlAndroid
@@ -75,6 +76,7 @@
MOCK_METHOD1(GetDeviceDir, bool(std::string*));
MOCK_METHOD0(GetDynamicPartitionsFeatureFlag, FeatureFlag());
MOCK_METHOD1(GetSuperPartitionName, std::string(uint32_t));
+ MOCK_METHOD0(GetVirtualAbFeatureFlag, FeatureFlag());
};
} // namespace chromeos_update_engine