Add UpdateAttempterIntegrationTesting

Test: th
Bug: 201099341

Change-Id: I46d5ad86e238d28b7c20ef6768ffadf0e6ab9177
diff --git a/common/testing_constants.h b/common/testing_constants.h
index 1367ce6..60a7ad8 100644
--- a/common/testing_constants.h
+++ b/common/testing_constants.h
@@ -17,23 +17,22 @@
 #ifndef UPDATE_ENGINE_COMMON_TESTING_CONSTANTS_H_
 #define UPDATE_ENGINE_COMMON_TESTING_CONSTANTS_H_
 
-[[maybe_unused]]
-static constexpr auto&& kUnittestPrivateKeyPath = "unittest_key.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPublicKeyPath = "unittest_key.pub.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPrivateKey2Path = "unittest_key2.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPublicKey2Path = "unittest_key2.pub.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPrivateKeyRSA4096Path =
+[[maybe_unused]] static constexpr auto&& kUnittestPrivateKeyPath =
+    "unittest_key.pem";
+[[maybe_unused]] static constexpr auto&& kUnittestOTACertsPath = "otacerts.zip";
+[[maybe_unused]] static constexpr auto&& kUnittestPublicKeyPath =
+    "unittest_key.pub.pem";
+[[maybe_unused]] static constexpr auto&& kUnittestPrivateKey2Path =
+    "unittest_key2.pem";
+[[maybe_unused]] static constexpr auto&& kUnittestPublicKey2Path =
+    "unittest_key2.pub.pem";
+[[maybe_unused]] static constexpr auto&& kUnittestPrivateKeyRSA4096Path =
     "unittest_key_RSA4096.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPublicKeyRSA4096Path =
+[[maybe_unused]] static constexpr auto&& kUnittestPublicKeyRSA4096Path =
     "unittest_key_RSA4096.pub.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPrivateKeyECPath = "unittest_key_EC.pem";
-[[maybe_unused]]
-static constexpr auto&& kUnittestPublicKeyECPath = "unittest_key_EC.pub.pem";
+[[maybe_unused]] static constexpr auto&& kUnittestPrivateKeyECPath =
+    "unittest_key_EC.pem";
+[[maybe_unused]] static constexpr auto&& kUnittestPublicKeyECPath =
+    "unittest_key_EC.pub.pem";
 
 #endif  // UPDATE_ENGINE_COMMON_TESTING_CONSTANTS_H_
diff --git a/common/utils.cc b/common/utils.cc
index 45ad425..7a4a836 100644
--- a/common/utils.cc
+++ b/common/utils.cc
@@ -1045,10 +1045,24 @@
   return android::base::MappedFile::FromFd(fd, 0, size, PROT_READ);
 }
 
+std::string_view GetReadonlyZeroString(size_t size) {
+  // Reserve 512MB of Virtual Address Space. No actual memory will be used.
+  static auto zero_block = GetReadonlyZeroBlock(1024 * 1024 * 512);
+  if (size > zero_block->size()) {
+    auto larger_block = GetReadonlyZeroBlock(size);
+    zero_block = std::move(larger_block);
+  }
+  return {zero_block->data(), size};
+}
+
 }  // namespace utils
 
 std::string HexEncode(const brillo::Blob& blob) noexcept {
   return base::HexEncode(blob.data(), blob.size());
 }
 
+std::string HexEncode(const std::string_view blob) noexcept {
+  return base::HexEncode(blob.data(), blob.size());
+}
+
 }  // namespace chromeos_update_engine
diff --git a/common/utils.h b/common/utils.h
index 003455d..50b6cb1 100644
--- a/common/utils.h
+++ b/common/utils.h
@@ -361,6 +361,8 @@
 
 std::unique_ptr<android::base::MappedFile> GetReadonlyZeroBlock(size_t size);
 
+std::string_view GetReadonlyZeroString(size_t size);
+
 }  // namespace utils
 
 // Utility class to close a file descriptor
@@ -481,6 +483,7 @@
 };
 
 std::string HexEncode(const brillo::Blob& blob) noexcept;
+std::string HexEncode(const std::string_view blob) noexcept;
 
 }  // namespace chromeos_update_engine