Fix incorrect mountable device path for VABC
Test: serve an OTA with postinstall, make sure postinstall works
Bug: 181182967
Change-Id: Ifd44bb700c4bca28a391c64fbc9888c79612f26f
diff --git a/aosp/dynamic_partition_control_android.cc b/aosp/dynamic_partition_control_android.cc
index 657eec9..62da659 100644
--- a/aosp/dynamic_partition_control_android.cc
+++ b/aosp/dynamic_partition_control_android.cc
@@ -1015,9 +1015,11 @@
partition_name + SlotSuffixForSlotNumber(slot);
if (UpdateUsesSnapshotCompression() && IsDynamicPartition(partition_name) &&
slot != current_slot) {
- return {{.mountable_device_path =
- GetStaticDevicePath(device_dir, partition_name_suffix),
- .is_dynamic = true}};
+ return {
+ {.mountable_device_path = base::FilePath{std::string{VABC_DEVICE_DIR}}
+ .Append(partition_name_suffix)
+ .value(),
+ .is_dynamic = true}};
}
// When looking up target partition devices, treat them as static if the
diff --git a/aosp/dynamic_partition_control_android.h b/aosp/dynamic_partition_control_android.h
index d7c8781..a23827b 100644
--- a/aosp/dynamic_partition_control_android.h
+++ b/aosp/dynamic_partition_control_android.h
@@ -20,6 +20,7 @@
#include <memory>
#include <set>
#include <string>
+#include <string_view>
#include <vector>
#include <base/files/file_util.h>
@@ -33,6 +34,10 @@
class DynamicPartitionControlAndroid : public DynamicPartitionControlInterface {
public:
+ // A directory where all partitions mapped by VABC is expected to be found.
+ // Per earlier discussion with VAB team, this directory is unlikely to change.
+ // So we declare it as a constant here.
+ static constexpr std::string_view VABC_DEVICE_DIR = "/dev/block/mapper/";
DynamicPartitionControlAndroid();
~DynamicPartitionControlAndroid();
diff --git a/aosp/dynamic_partition_control_android_unittest.cc b/aosp/dynamic_partition_control_android_unittest.cc
index 2f290d7..4a12b83 100644
--- a/aosp/dynamic_partition_control_android_unittest.cc
+++ b/aosp/dynamic_partition_control_android_unittest.cc
@@ -472,7 +472,10 @@
auto device_info =
dynamicControl().GetPartitionDevice("system", target(), source(), false);
ASSERT_TRUE(device_info.has_value());
- ASSERT_EQ(device_info->mountable_device_path, GetDevice(T("system")));
+ base::FilePath vabc_device_dir{
+ std::string{DynamicPartitionControlAndroid::VABC_DEVICE_DIR}};
+ ASSERT_EQ(device_info->mountable_device_path,
+ vabc_device_dir.Append(T("system")).value());
}
TEST_P(DynamicPartitionControlAndroidTestP,
@@ -1102,7 +1105,8 @@
SetMetadata(
source(), {{S("system"), 2_GiB}, {S("vendor"), 1_GiB}}, 0, super_size);
ExpectUnmap({T("system"), T("vendor")});
- // Expect that the source partitions aren't present in target super metadata.
+ // Expect that the source partitions aren't present in target super
+ // metadata.
ExpectStoreMetadata({{T("system"), 3_GiB}, {T("vendor"), 1_GiB}});
uint64_t required_size = 0;