Index: delta_performer_unittest.cc |
diff --git a/delta_performer_unittest.cc b/delta_performer_unittest.cc |
index fe12b9b34978acedc0ba17f28ad8b191c08e5392..09a4c7d3e1807237c56af260a00df84eab22989a 100755 |
--- a/delta_performer_unittest.cc |
+++ b/delta_performer_unittest.cc |
@@ -17,6 +17,7 @@ |
#include "update_engine/delta_diff_generator.h" |
#include "update_engine/delta_performer.h" |
#include "update_engine/graph_types.h" |
+#include "update_engine/payload_signer.h" |
#include "update_engine/test_utils.h" |
#include "update_engine/update_metadata.pb.h" |
#include "update_engine/utils.h" |
@@ -27,6 +28,8 @@ using std::min; |
using std::string; |
using std::vector; |
+extern const char* kUnittestPrivateKeyPath; |
+ |
class DeltaPerformerTest : public ::testing::Test { }; |
TEST(DeltaPerformerTest, ExtentsToByteStringTest) { |
@@ -166,7 +169,7 @@ TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { |
vector<char> new_kernel_data(old_kernel_data.size()); |
FillWithData(&old_kernel_data); |
FillWithData(&new_kernel_data); |
- |
+ |
// change the new kernel data |
const char* new_data_string = "This is new data."; |
strcpy(&new_kernel_data[0], new_data_string); |
@@ -179,25 +182,57 @@ TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { |
string delta_path; |
EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL)); |
+ LOG(INFO) << "delta path: " << delta_path; |
ScopedPathUnlinker delta_path_unlinker(delta_path); |
{ |
string a_mnt, b_mnt; |
ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY); |
ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY); |
- EXPECT_TRUE(DeltaDiffGenerator::GenerateDeltaUpdateFile(a_mnt, |
- a_img, |
- b_mnt, |
- b_img, |
- old_kernel, |
- new_kernel, |
- delta_path)); |
+ EXPECT_TRUE( |
+ DeltaDiffGenerator::GenerateDeltaUpdateFile(a_mnt, |
+ a_img, |
+ b_mnt, |
+ b_img, |
+ old_kernel, |
+ new_kernel, |
+ delta_path, |
+ kUnittestPrivateKeyPath)); |
} |
// Read delta into memory. |
vector<char> delta; |
EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); |
+ // Check that the null signature blob exists |
+ { |
+ LOG(INFO) << "delta size: " << delta.size(); |
+ DeltaArchiveManifest manifest; |
+ const int kManifestSizeOffset = 12; |
+ const int kManifestOffset = 20; |
+ uint64_t manifest_size = 0; |
+ memcpy(&manifest_size, &delta[kManifestSizeOffset], sizeof(manifest_size)); |
+ manifest_size = be64toh(manifest_size); |
+ LOG(INFO) << "manifest size: " << manifest_size; |
+ EXPECT_TRUE(manifest.ParseFromArray(&delta[kManifestOffset], |
+ manifest_size)); |
+ EXPECT_TRUE(manifest.has_signatures_offset()); |
+ |
+ Signatures sigs_message; |
+ EXPECT_TRUE(sigs_message.ParseFromArray( |
+ &delta[kManifestOffset + manifest_size + manifest.signatures_offset()], |
+ manifest.signatures_size())); |
+ EXPECT_EQ(1, sigs_message.signatures_size()); |
+ const Signatures_Signature& signature = sigs_message.signatures(0); |
+ EXPECT_EQ(1, signature.version()); |
+ |
+ uint64_t expected_sig_data_length = 0; |
+ EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath, |
+ &expected_sig_data_length)); |
+ EXPECT_EQ(expected_sig_data_length, manifest.signatures_size()); |
+ EXPECT_FALSE(signature.data().empty()); |
+ } |
+ |
// Update the A image in place. |
DeltaPerformer performer; |
@@ -215,7 +250,7 @@ TEST(DeltaPerformerTest, RunAsRootSmallImageTest) { |
EXPECT_EQ(0, performer.Close()); |
CompareFilesByBlock(old_kernel, new_kernel); |
- |
+ |
vector<char> updated_kernel_partition; |
EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition)); |
EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string, |