Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: src/platform/update_engine/delta_performer_unittest.cc

Issue 1819002: AU: delta compress the kernel partition (Closed) Base URL: ssh://git@chromiumos-git/chromeos
Patch Set: fixes for review Created 10 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <sys/mount.h> 5 #include <sys/mount.h>
6 #include <inttypes.h> 6 #include <inttypes.h>
7 7
8 #include <algorithm> 8 #include <algorithm>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 1024 * 1024)); 147 1024 * 1024));
148 EXPECT_EQ(0, system(StringPrintf("dd if=/dev/zero of=%s/partsparese bs=1 " 148 EXPECT_EQ(0, system(StringPrintf("dd if=/dev/zero of=%s/partsparese bs=1 "
149 "seek=4096 count=1", 149 "seek=4096 count=1",
150 b_mnt.c_str()).c_str())); 150 b_mnt.c_str()).c_str()));
151 EXPECT_TRUE(utils::WriteFile(StringPrintf("%s/hardtocompress", 151 EXPECT_TRUE(utils::WriteFile(StringPrintf("%s/hardtocompress",
152 b_mnt.c_str()).c_str(), 152 b_mnt.c_str()).c_str(),
153 reinterpret_cast<const char*>(kRandomString), 153 reinterpret_cast<const char*>(kRandomString),
154 sizeof(kRandomString))); 154 sizeof(kRandomString)));
155 } 155 }
156 156
157 string old_kernel;
158 EXPECT_TRUE(utils::MakeTempFile("/tmp/old_kernel.XXXXXX", &old_kernel, NULL));
159 ScopedPathUnlinker old_kernel_unlinker(old_kernel);
160
161 string new_kernel;
162 EXPECT_TRUE(utils::MakeTempFile("/tmp/new_kernel.XXXXXX", &new_kernel, NULL));
163 ScopedPathUnlinker new_kernel_unlinker(new_kernel);
164
165 vector<char> old_kernel_data(4096); // Something small for a test
166 vector<char> new_kernel_data(old_kernel_data.size());
167 FillWithData(&old_kernel_data);
168 FillWithData(&new_kernel_data);
169
170 // change the new kernel data
171 const char* new_data_string = "This is new data.";
172 strcpy(&new_kernel_data[0], new_data_string);
173
174 // Write kernels to disk
175 EXPECT_TRUE(utils::WriteFile(
176 old_kernel.c_str(), &old_kernel_data[0], old_kernel_data.size()));
177 EXPECT_TRUE(utils::WriteFile(
178 new_kernel.c_str(), &new_kernel_data[0], new_kernel_data.size()));
179
157 string delta_path; 180 string delta_path;
158 EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL)); 181 EXPECT_TRUE(utils::MakeTempFile("/tmp/delta.XXXXXX", &delta_path, NULL));
159 ScopedPathUnlinker delta_path_unlinker(delta_path); 182 ScopedPathUnlinker delta_path_unlinker(delta_path);
160 { 183 {
161 string a_mnt, b_mnt; 184 string a_mnt, b_mnt;
162 ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY); 185 ScopedLoopMounter a_mounter(a_img, &a_mnt, MS_RDONLY);
163 ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY); 186 ScopedLoopMounter b_mounter(b_img, &b_mnt, MS_RDONLY);
164 187
165 EXPECT_TRUE(DeltaDiffGenerator::GenerateDeltaUpdateFile(a_mnt, 188 EXPECT_TRUE(DeltaDiffGenerator::GenerateDeltaUpdateFile(a_mnt,
166 a_img, 189 a_img,
167 b_mnt, 190 b_mnt,
168 b_img, 191 b_img,
192 old_kernel,
193 new_kernel,
169 delta_path)); 194 delta_path));
170 } 195 }
171 196
172 // Read delta into memory. 197 // Read delta into memory.
173 vector<char> delta; 198 vector<char> delta;
174 EXPECT_TRUE(utils::ReadFile(delta_path, &delta)); 199 EXPECT_TRUE(utils::ReadFile(delta_path, &delta));
175 200
176 // Update the A image in place. 201 // Update the A image in place.
177 DeltaPerformer performer; 202 DeltaPerformer performer;
178 203
179 EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0)); 204 EXPECT_EQ(0, performer.Open(a_img.c_str(), 0, 0));
205 EXPECT_TRUE(performer.OpenKernel(old_kernel.c_str()));
180 206
181 // Write at some number of bytes per operation. Arbitrarily chose 5. 207 // Write at some number of bytes per operation. Arbitrarily chose 5.
182 const size_t kBytesPerWrite = 5; 208 const size_t kBytesPerWrite = 5;
183 for (size_t i = 0; i < delta.size(); i += kBytesPerWrite) { 209 for (size_t i = 0; i < delta.size(); i += kBytesPerWrite) {
184 size_t count = min(delta.size() - i, kBytesPerWrite); 210 size_t count = min(delta.size() - i, kBytesPerWrite);
185 EXPECT_EQ(count, performer.Write(&delta[i], count)); 211 EXPECT_EQ(count, performer.Write(&delta[i], count));
186 } 212 }
187 213
188 // Wrapper around close. Returns 0 on success or -errno on error. 214 // Wrapper around close. Returns 0 on success or -errno on error.
189 EXPECT_EQ(0, performer.Close()); 215 EXPECT_EQ(0, performer.Close());
190 216
191 CompareFilesByBlock("/tmp/a_ref", "/tmp/b_ref"); 217 CompareFilesByBlock("/tmp/a_ref", "/tmp/b_ref");
218 CompareFilesByBlock(old_kernel, new_kernel);
219
220 vector<char> updated_kernel_partition;
221 EXPECT_TRUE(utils::ReadFile(old_kernel, &updated_kernel_partition));
222 EXPECT_EQ(0, strncmp(&updated_kernel_partition[0], new_data_string,
223 strlen(new_data_string)));
192 } 224 }
193 225
194 } // namespace chromeos_update_engine 226 } // namespace chromeos_update_engine
OLDNEW
« no previous file with comments | « src/platform/update_engine/delta_performer.cc ('k') | src/platform/update_engine/download_action_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698