Fix unittest key path in Brillo.

The unittests weren't able to find the keys if it's not run from the
update_engine_unittests directory.

Test: /data/nativetest/update_engine_unittests/update_engine_unittests
Bug: 26955860

Change-Id: I4c189cca2714986d3d2b2669b54a5dff9a488964
diff --git a/common/http_fetcher_unittest.cc b/common/http_fetcher_unittest.cc
index 0d4b5da..e287103 100644
--- a/common/http_fetcher_unittest.cc
+++ b/common/http_fetcher_unittest.cc
@@ -117,9 +117,7 @@
 
     // Spawn the server process.
     unique_ptr<brillo::Process> http_server(new brillo::ProcessImpl());
-    base::FilePath test_server_path =
-        test_utils::GetBuildArtifactsPath().Append("test_http_server");
-    http_server->AddArg(test_server_path.value());
+    http_server->AddArg(test_utils::GetBuildArtifactsPath("test_http_server"));
     http_server->RedirectUsingPipe(STDOUT_FILENO, false);
 
     if (!http_server->Start()) {
diff --git a/common/test_utils.cc b/common/test_utils.cc
index 2de8ced..13ce6f9 100644
--- a/common/test_utils.cc
+++ b/common/test_utils.cc
@@ -263,5 +263,9 @@
   return exe_path.DirName();
 }
 
+string GetBuildArtifactsPath(const string& relative_path) {
+  return GetBuildArtifactsPath().Append(relative_path).value();
+}
+
 }  // namespace test_utils
 }  // namespace chromeos_update_engine
diff --git a/common/test_utils.h b/common/test_utils.h
index e4919d8..952cbea 100644
--- a/common/test_utils.h
+++ b/common/test_utils.h
@@ -190,6 +190,8 @@
 // Returns the path where the build artifacts are stored. This is the directory
 // where the unittest executable is being run from.
 base::FilePath GetBuildArtifactsPath();
+// Returns the path of the build artifact specified in |relative_path|.
+std::string GetBuildArtifactsPath(const std::string& relative_path);
 
 }  // namespace test_utils
 
diff --git a/payload_consumer/delta_performer_integration_test.cc b/payload_consumer/delta_performer_integration_test.cc
index 5f0dc89..b9fed06 100644
--- a/payload_consumer/delta_performer_integration_test.cc
+++ b/payload_consumer/delta_performer_integration_test.cc
@@ -47,6 +47,7 @@
 
 using std::string;
 using std::vector;
+using test_utils::GetBuildArtifactsPath;
 using test_utils::ScopedLoopMounter;
 using test_utils::System;
 using test_utils::kRandomString;
@@ -191,31 +192,22 @@
 
 static void SignGeneratedPayload(const string& payload_path,
                                  uint64_t* out_metadata_size) {
-  int signature_size = GetSignatureSize(kUnittestPrivateKeyPath);
+  string private_key_path = GetBuildArtifactsPath(kUnittestPrivateKeyPath);
+  int signature_size = GetSignatureSize(private_key_path);
   brillo::Blob hash;
   ASSERT_TRUE(PayloadSigner::HashPayloadForSigning(
-      payload_path,
-      vector<int>(1, signature_size),
-      &hash,
-      nullptr));
+      payload_path, {signature_size}, &hash, nullptr));
   brillo::Blob signature;
-  ASSERT_TRUE(PayloadSigner::SignHash(hash,
-                                      kUnittestPrivateKeyPath,
-                                      &signature));
+  ASSERT_TRUE(PayloadSigner::SignHash(hash, private_key_path, &signature));
   ASSERT_TRUE(PayloadSigner::AddSignatureToPayload(
-      payload_path,
-      vector<brillo::Blob>(1, signature),
-      {},
-      payload_path,
-      out_metadata_size));
+      payload_path, {signature}, {}, payload_path, out_metadata_size));
   EXPECT_TRUE(PayloadSigner::VerifySignedPayload(
-      payload_path,
-      kUnittestPublicKeyPath));
+      payload_path, GetBuildArtifactsPath(kUnittestPublicKeyPath)));
 }
 
 static void SignGeneratedShellPayload(SignatureTest signature_test,
                                       const string& payload_path) {
-  string private_key_path = kUnittestPrivateKeyPath;
+  string private_key_path = GetBuildArtifactsPath(kUnittestPrivateKeyPath);
   if (signature_test == kSignatureGeneratedShellBadKey) {
     ASSERT_TRUE(utils::MakeTempFile("key.XXXXXX",
                                     &private_key_path,
@@ -276,7 +268,7 @@
     ASSERT_EQ(0,
               System(base::StringPrintf(
                   "openssl rsautl -raw -sign -inkey %s -in %s -out %s",
-                  kUnittestPrivateKey2Path,
+                  GetBuildArtifactsPath(kUnittestPrivateKey2Path).c_str(),
                   hash_file.c_str(),
                   sig_file2.c_str())));
     // Append second sig file to first path
@@ -290,13 +282,14 @@
                 payload_path.c_str(),
                 sig_file.c_str(),
                 payload_path.c_str())));
-  int verify_result =
-      System(base::StringPrintf(
-          "./delta_generator -in_file=%s -public_key=%s -public_key_version=%d",
-          payload_path.c_str(),
-          signature_test == kSignatureGeneratedShellRotateCl2 ?
-          kUnittestPublicKey2Path : kUnittestPublicKeyPath,
-          signature_test == kSignatureGeneratedShellRotateCl2 ? 2 : 1));
+  int verify_result = System(base::StringPrintf(
+      "./delta_generator -in_file=%s -public_key=%s -public_key_version=%d",
+      payload_path.c_str(),
+      (signature_test == kSignatureGeneratedShellRotateCl2
+           ? GetBuildArtifactsPath(kUnittestPublicKey2Path)
+           : GetBuildArtifactsPath(kUnittestPublicKeyPath))
+          .c_str(),
+      signature_test == kSignatureGeneratedShellRotateCl2 ? 2 : 1));
   if (signature_test == kSignatureGeneratedShellBadKey) {
     ASSERT_NE(0, verify_result);
   } else {
@@ -319,9 +312,9 @@
   EXPECT_TRUE(
       utils::MakeTempFile("result_img.XXXXXX", &state->result_img, nullptr));
 
-  EXPECT_TRUE(base::CopyFile(
-      test_utils::GetBuildArtifactsPath().Append("gen/disk_ext2_4k.img"),
-      base::FilePath(state->a_img)));
+  EXPECT_TRUE(
+      base::CopyFile(GetBuildArtifactsPath().Append("gen/disk_ext2_4k.img"),
+                     base::FilePath(state->a_img)));
 
   state->image_size = utils::FileSize(state->a_img);
 
@@ -398,9 +391,9 @@
                 utils::FileSize(state->result_img));
     }
 
-    EXPECT_TRUE(base::CopyFile(
-        test_utils::GetBuildArtifactsPath().Append("gen/disk_ext2_4k.img"),
-        base::FilePath(state->b_img)));
+    EXPECT_TRUE(
+        base::CopyFile(GetBuildArtifactsPath().Append("gen/disk_ext2_4k.img"),
+                       base::FilePath(state->b_img)));
 
     // Make some changes to the B image.
     string b_mnt;
@@ -499,7 +492,9 @@
   LOG(INFO) << "delta path: " << state->delta_path;
   {
     const string private_key =
-        signature_test == kSignatureGenerator ? kUnittestPrivateKeyPath : "";
+        signature_test == kSignatureGenerator
+            ? GetBuildArtifactsPath(kUnittestPrivateKeyPath)
+            : "";
 
     PayloadGenerationConfig payload_config;
     payload_config.is_delta = !full_rootfs;
@@ -551,7 +546,8 @@
 
   if (signature_test == kSignatureGeneratedPlaceholder ||
       signature_test == kSignatureGeneratedPlaceholderMismatch) {
-    int signature_size = GetSignatureSize(kUnittestPrivateKeyPath);
+    int signature_size =
+        GetSignatureSize(GetBuildArtifactsPath(kUnittestPrivateKeyPath));
     LOG(INFO) << "Inserting placeholder signature.";
     ASSERT_TRUE(InsertSignaturePlaceholder(signature_size, state->delta_path,
                                            &state->metadata_size));
@@ -618,10 +614,10 @@
       EXPECT_EQ(1U, signature.version());
 
       uint64_t expected_sig_data_length = 0;
-      vector<string> key_paths{kUnittestPrivateKeyPath};
+      vector<string> key_paths{GetBuildArtifactsPath(kUnittestPrivateKeyPath)};
       if (signature_test == kSignatureGeneratedShellRotateCl1 ||
           signature_test == kSignatureGeneratedShellRotateCl2) {
-        key_paths.push_back(kUnittestPrivateKey2Path);
+        key_paths.push_back(GetBuildArtifactsPath(kUnittestPrivateKey2Path));
       }
       EXPECT_TRUE(PayloadSigner::SignatureBlobLength(
           key_paths,
@@ -735,7 +731,7 @@
   ASSERT_TRUE(PayloadSigner::GetMetadataSignature(
       state->delta.data(),
       state->metadata_size,
-      kUnittestPrivateKeyPath,
+      GetBuildArtifactsPath(kUnittestPrivateKeyPath),
       &install_plan->metadata_signature));
   EXPECT_FALSE(install_plan->metadata_signature.empty());
 
@@ -744,8 +740,9 @@
                                   &state->fake_hardware_,
                                   &state->mock_delegate_,
                                   install_plan);
-  EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath));
-  (*performer)->set_public_key_path(kUnittestPublicKeyPath);
+  string public_key_path = GetBuildArtifactsPath(kUnittestPublicKeyPath);
+  EXPECT_TRUE(utils::FileExists(public_key_path.c_str()));
+  (*performer)->set_public_key_path(public_key_path);
   DeltaPerformerIntegrationTest::SetSupportedVersion(*performer, minor_version);
 
   EXPECT_EQ(static_cast<off_t>(state->image_size),
diff --git a/payload_consumer/delta_performer_unittest.cc b/payload_consumer/delta_performer_unittest.cc
index 89182fe..f25ee2b 100644
--- a/payload_consumer/delta_performer_unittest.cc
+++ b/payload_consumer/delta_performer_unittest.cc
@@ -49,6 +49,7 @@
 
 using std::string;
 using std::vector;
+using test_utils::GetBuildArtifactsPath;
 using test_utils::System;
 using test_utils::kRandomString;
 using testing::_;
@@ -220,9 +221,10 @@
     string payload_path;
     EXPECT_TRUE(utils::MakeTempFile("Payload-XXXXXX", &payload_path, nullptr));
     ScopedPathUnlinker payload_unlinker(payload_path);
-    EXPECT_TRUE(payload.WritePayload(payload_path, blob_path,
-        sign_payload ? kUnittestPrivateKeyPath : "",
-        &install_plan_.metadata_size));
+    string private_key =
+        sign_payload ? GetBuildArtifactsPath(kUnittestPrivateKeyPath) : "";
+    EXPECT_TRUE(payload.WritePayload(
+        payload_path, blob_path, private_key, &install_plan_.metadata_size));
 
     brillo::Blob payload_data;
     EXPECT_TRUE(utils::ReadFile(payload_path, &payload_data));
@@ -311,7 +313,6 @@
   void DoMetadataSignatureTest(MetadataSignatureTest metadata_signature_test,
                                bool sign_payload,
                                bool hash_checks_mandatory) {
-
     // Loads the payload and parses the manifest.
     brillo::Blob payload = GeneratePayload(brillo::Blob(),
         vector<AnnotatedOperation>(), sign_payload,
@@ -346,7 +347,7 @@
         ASSERT_TRUE(PayloadSigner::GetMetadataSignature(
             payload.data(),
             install_plan_.metadata_size,
-            kUnittestPrivateKeyPath,
+            GetBuildArtifactsPath(kUnittestPrivateKeyPath),
             &install_plan_.metadata_signature));
         EXPECT_FALSE(install_plan_.metadata_signature.empty());
         expected_result = DeltaPerformer::kMetadataParseSuccess;
@@ -362,8 +363,9 @@
 
     // Use the public key corresponding to the private key used above to
     // sign the metadata.
-    EXPECT_TRUE(utils::FileExists(kUnittestPublicKeyPath));
-    performer_.set_public_key_path(kUnittestPublicKeyPath);
+    string public_key_path = GetBuildArtifactsPath(kUnittestPublicKeyPath);
+    EXPECT_TRUE(utils::FileExists(public_key_path.c_str()));
+    performer_.set_public_key_path(public_key_path);
 
     // Init actual_error with an invalid value so that we make sure
     // ParsePayloadMetadata properly populates it in all cases.
@@ -753,10 +755,10 @@
   performer_.major_payload_version_ = kBrilloMajorPayloadVersion;
   performer_.metadata_size_ = install_plan_.metadata_size;
   uint64_t signature_length;
-  EXPECT_TRUE(PayloadSigner::SignatureBlobLength({kUnittestPrivateKeyPath},
-                                                 &signature_length));
+  EXPECT_TRUE(PayloadSigner::SignatureBlobLength(
+      {GetBuildArtifactsPath(kUnittestPrivateKeyPath)}, &signature_length));
   performer_.metadata_signature_size_ = signature_length;
-  performer_.set_public_key_path(kUnittestPublicKeyPath);
+  performer_.set_public_key_path(GetBuildArtifactsPath(kUnittestPublicKeyPath));
   EXPECT_EQ(ErrorCode::kSuccess,
             performer_.ValidateMetadataSignature(payload_data));
 }
diff --git a/payload_consumer/postinstall_runner_action_unittest.cc b/payload_consumer/postinstall_runner_action_unittest.cc
index c6c5ecf..7d300eb 100644
--- a/payload_consumer/postinstall_runner_action_unittest.cc
+++ b/payload_consumer/postinstall_runner_action_unittest.cc
@@ -86,9 +86,8 @@
     powerwash_marker_file_ = working_dir_ + "/factory_install_reset";
     // These tests use the postinstall files generated by "generate_images.sh"
     // stored in the "disk_ext2_unittest.img" image.
-    postinstall_image_ = test_utils::GetBuildArtifactsPath()
-                             .Append("gen/disk_ext2_unittest.img")
-                             .value();
+    postinstall_image_ =
+        test_utils::GetBuildArtifactsPath("gen/disk_ext2_unittest.img");
 
     ASSERT_EQ(0U, getuid()) << "Run these tests as root.";
   }
diff --git a/payload_generator/delta_diff_utils_unittest.cc b/payload_generator/delta_diff_utils_unittest.cc
index c70c70f..7364965 100644
--- a/payload_generator/delta_diff_utils_unittest.cc
+++ b/payload_generator/delta_diff_utils_unittest.cc
@@ -819,12 +819,10 @@
 }
 
 TEST_F(DeltaDiffUtilsTest, IsExtFilesystemTest) {
-  EXPECT_TRUE(diff_utils::IsExtFilesystem(test_utils::GetBuildArtifactsPath()
-                                              .Append("gen/disk_ext2_1k.img")
-                                              .value()));
-  EXPECT_TRUE(diff_utils::IsExtFilesystem(test_utils::GetBuildArtifactsPath()
-                                              .Append("gen/disk_ext2_4k.img")
-                                              .value()));
+  EXPECT_TRUE(diff_utils::IsExtFilesystem(
+      test_utils::GetBuildArtifactsPath("gen/disk_ext2_1k.img")));
+  EXPECT_TRUE(diff_utils::IsExtFilesystem(
+      test_utils::GetBuildArtifactsPath("gen/disk_ext2_4k.img")));
 }
 
 TEST_F(DeltaDiffUtilsTest, IsSquashfs4FilesystemTest) {
diff --git a/payload_generator/ext2_filesystem_unittest.cc b/payload_generator/ext2_filesystem_unittest.cc
index 3824dc2..a3c7731 100644
--- a/payload_generator/ext2_filesystem_unittest.cc
+++ b/payload_generator/ext2_filesystem_unittest.cc
@@ -34,6 +34,7 @@
 #include "update_engine/common/utils.h"
 #include "update_engine/payload_generator/extent_utils.h"
 
+using chromeos_update_engine::test_utils::GetBuildArtifactsPath;
 using std::map;
 using std::set;
 using std::string;
@@ -72,9 +73,8 @@
 }
 
 TEST_F(Ext2FilesystemTest, EmptyFilesystem) {
-  base::FilePath path =
-      test_utils::GetBuildArtifactsPath().Append("gen/disk_ext2_4k_empty.img");
-  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(path.value());
+  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(
+      GetBuildArtifactsPath("gen/disk_ext2_4k_empty.img"));
 
   ASSERT_NE(nullptr, fs.get());
   EXPECT_EQ(kDefaultFilesystemBlockCount, fs->GetBlockCount());
@@ -101,7 +101,7 @@
   const vector<string> kGeneratedImages = {
       "disk_ext2_1k.img",
       "disk_ext2_4k.img" };
-  base::FilePath build_path = test_utils::GetBuildArtifactsPath().Append("gen");
+  base::FilePath build_path = GetBuildArtifactsPath().Append("gen");
   for (const string& fs_name : kGeneratedImages) {
     LOG(INFO) << "Testing " << fs_name;
     unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(
@@ -180,9 +180,8 @@
 }
 
 TEST_F(Ext2FilesystemTest, LoadSettingsFailsTest) {
-  base::FilePath path = test_utils::GetBuildArtifactsPath().Append(
-      "gen/disk_ext2_1k.img");
-  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(path.value());
+  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(
+      GetBuildArtifactsPath("gen/disk_ext2_1k.img"));
   ASSERT_NE(nullptr, fs.get());
 
   brillo::KeyValueStore store;
@@ -191,9 +190,8 @@
 }
 
 TEST_F(Ext2FilesystemTest, LoadSettingsWorksTest) {
-  base::FilePath path =
-      test_utils::GetBuildArtifactsPath().Append("gen/disk_ext2_unittest.img");
-  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(path.value());
+  unique_ptr<Ext2Filesystem> fs = Ext2Filesystem::CreateFromFile(
+      GetBuildArtifactsPath("gen/disk_ext2_unittest.img"));
   ASSERT_NE(nullptr, fs.get());
 
   brillo::KeyValueStore store;
diff --git a/payload_generator/payload_signer_unittest.cc b/payload_generator/payload_signer_unittest.cc
index ebdd280..f6319d4 100644
--- a/payload_generator/payload_signer_unittest.cc
+++ b/payload_generator/payload_signer_unittest.cc
@@ -23,12 +23,14 @@
 #include <gtest/gtest.h>
 
 #include "update_engine/common/hash_calculator.h"
+#include "update_engine/common/test_utils.h"
 #include "update_engine/common/utils.h"
 #include "update_engine/payload_consumer/payload_constants.h"
 #include "update_engine/payload_consumer/payload_verifier.h"
 #include "update_engine/payload_generator/payload_file.h"
 #include "update_engine/update_metadata.pb.h"
 
+using chromeos_update_engine::test_utils::GetBuildArtifactsPath;
 using std::string;
 using std::vector;
 
@@ -162,7 +164,8 @@
 
 TEST_F(PayloadSignerTest, SignSimpleTextTest) {
   brillo::Blob signature_blob;
-  SignSampleData(&signature_blob, {kUnittestPrivateKeyPath});
+  SignSampleData(&signature_blob,
+                 {GetBuildArtifactsPath(kUnittestPrivateKeyPath)});
 
   // Check the signature itself
   Signatures signatures;
@@ -181,28 +184,34 @@
 TEST_F(PayloadSignerTest, VerifyAllSignatureTest) {
   brillo::Blob signature_blob;
   SignSampleData(&signature_blob,
-                 {kUnittestPrivateKeyPath, kUnittestPrivateKey2Path});
+                 {GetBuildArtifactsPath(kUnittestPrivateKeyPath),
+                  GetBuildArtifactsPath(kUnittestPrivateKey2Path)});
 
   // Either public key should pass the verification.
-  EXPECT_TRUE(PayloadVerifier::VerifySignature(signature_blob,
-                                               kUnittestPublicKeyPath,
-                                               padded_hash_data_));
-  EXPECT_TRUE(PayloadVerifier::VerifySignature(signature_blob,
-                                               kUnittestPublicKey2Path,
-                                               padded_hash_data_));
+  EXPECT_TRUE(PayloadVerifier::VerifySignature(
+      signature_blob,
+      GetBuildArtifactsPath(kUnittestPublicKeyPath),
+      padded_hash_data_));
+  EXPECT_TRUE(PayloadVerifier::VerifySignature(
+      signature_blob,
+      GetBuildArtifactsPath(kUnittestPublicKey2Path),
+      padded_hash_data_));
 }
 
 TEST_F(PayloadSignerTest, VerifySignatureTest) {
   brillo::Blob signature_blob;
-  SignSampleData(&signature_blob, {kUnittestPrivateKeyPath});
+  SignSampleData(&signature_blob,
+                 {GetBuildArtifactsPath(kUnittestPrivateKeyPath)});
 
-  EXPECT_TRUE(PayloadVerifier::VerifySignature(signature_blob,
-                                               kUnittestPublicKeyPath,
-                                               padded_hash_data_));
+  EXPECT_TRUE(PayloadVerifier::VerifySignature(
+      signature_blob,
+      GetBuildArtifactsPath(kUnittestPublicKeyPath),
+      padded_hash_data_));
   // Passing the invalid key should fail the verification.
-  EXPECT_FALSE(PayloadVerifier::VerifySignature(signature_blob,
-                                                kUnittestPublicKey2Path,
-                                                padded_hash_data_));
+  EXPECT_FALSE(PayloadVerifier::VerifySignature(
+      signature_blob,
+      GetBuildArtifactsPath(kUnittestPublicKey2Path),
+      padded_hash_data_));
 }
 
 TEST_F(PayloadSignerTest, SkipMetadataSignatureTest) {
@@ -221,8 +230,11 @@
   brillo::Blob unsigned_payload_hash, unsigned_metadata_hash;
   EXPECT_TRUE(PayloadSigner::HashPayloadForSigning(
       payload_path, sizes, &unsigned_payload_hash, &unsigned_metadata_hash));
-  EXPECT_TRUE(payload.WritePayload(
-      payload_path, "/dev/null", kUnittestPrivateKeyPath, &metadata_size));
+  EXPECT_TRUE(
+      payload.WritePayload(payload_path,
+                           "/dev/null",
+                           GetBuildArtifactsPath(kUnittestPrivateKeyPath),
+                           &metadata_size));
   brillo::Blob signed_payload_hash, signed_metadata_hash;
   EXPECT_TRUE(PayloadSigner::HashPayloadForSigning(
       payload_path, sizes, &signed_payload_hash, &signed_metadata_hash));
@@ -240,10 +252,13 @@
   PayloadFile payload;
   EXPECT_TRUE(payload.Init(config));
   uint64_t metadata_size;
-  EXPECT_TRUE(payload.WritePayload(
-      payload_path, "/dev/null", kUnittestPrivateKeyPath, &metadata_size));
-  EXPECT_TRUE(PayloadSigner::VerifySignedPayload(payload_path,
-                                                 kUnittestPublicKeyPath));
+  EXPECT_TRUE(
+      payload.WritePayload(payload_path,
+                           "/dev/null",
+                           GetBuildArtifactsPath(kUnittestPrivateKeyPath),
+                           &metadata_size));
+  EXPECT_TRUE(PayloadSigner::VerifySignedPayload(
+      payload_path, GetBuildArtifactsPath(kUnittestPublicKeyPath)));
 }
 
 }  // namespace chromeos_update_engine