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

Side by Side Diff: chrome/browser/safe_browsing/sandboxed_zip_analyzer_unittest.cc

Issue 2900803002: Renaming zip_analyzer_results to archive_analyzer_results (Closed)
Patch Set: minor fixups Created 3 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
« no previous file with comments | « chrome/browser/safe_browsing/sandboxed_zip_analyzer.cc ('k') | chrome/common/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium 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 "chrome/browser/safe_browsing/sandboxed_zip_analyzer.h" 5 #include "chrome/browser/safe_browsing/sandboxed_zip_analyzer.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/path_service.h" 13 #include "base/path_service.h"
14 #include "base/run_loop.h" 14 #include "base/run_loop.h"
15 #include "build/build_config.h" 15 #include "build/build_config.h"
16 #include "chrome/common/chrome_paths.h" 16 #include "chrome/common/chrome_paths.h"
17 #include "chrome/common/safe_browsing/zip_analyzer_results.h" 17 #include "chrome/common/safe_browsing/archive_analyzer_results.h"
18 #include "content/public/test/test_browser_thread_bundle.h" 18 #include "content/public/test/test_browser_thread_bundle.h"
19 #include "content/public/test/test_utils.h" 19 #include "content/public/test/test_utils.h"
20 #include "crypto/sha2.h" 20 #include "crypto/sha2.h"
21 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
22 22
23 namespace safe_browsing { 23 namespace safe_browsing {
24 24
25 class SandboxedZipAnalyzerTest : public ::testing::Test { 25 class SandboxedZipAnalyzerTest : public ::testing::Test {
26 protected: 26 protected:
27 // Constants for validating the data reported by the analyzer. 27 // Constants for validating the data reported by the analyzer.
28 struct BinaryData { 28 struct BinaryData {
29 const char* file_basename; 29 const char* file_basename;
30 ClientDownloadRequest_DownloadType download_type; 30 ClientDownloadRequest_DownloadType download_type;
31 const uint8_t* sha256_digest; 31 const uint8_t* sha256_digest;
32 int64_t length; 32 int64_t length;
33 bool is_signed; 33 bool is_signed;
34 }; 34 };
35 35
36 // A helper that provides a SandboxedZipAnalyzer::ResultCallback that will 36 // A helper that provides a SandboxedZipAnalyzer::ResultCallback that will
37 // store a copy of an analyzer's results and then run a closure. 37 // store a copy of an analyzer's results and then run a closure.
38 class ResultsGetter { 38 class ResultsGetter {
39 public: 39 public:
40 ResultsGetter(const base::Closure& quit_closure, 40 ResultsGetter(const base::Closure& quit_closure,
41 zip_analyzer::Results* results) 41 ArchiveAnalyzerResults* results)
42 : quit_closure_(quit_closure), 42 : quit_closure_(quit_closure), results_(results) {
43 results_(results) {
44 DCHECK(results); 43 DCHECK(results);
45 results->success = false; 44 results->success = false;
46 } 45 }
47 46
48 SandboxedZipAnalyzer::ResultCallback GetCallback() { 47 SandboxedZipAnalyzer::ResultCallback GetCallback() {
49 return base::Bind(&ResultsGetter::OnZipAnalyzerResults, 48 return base::Bind(&ResultsGetter::OnZipAnalyzerResults,
50 base::Unretained(this)); 49 base::Unretained(this));
51 } 50 }
52 51
53 private: 52 private:
54 void OnZipAnalyzerResults(const zip_analyzer::Results& results) { 53 void OnZipAnalyzerResults(const ArchiveAnalyzerResults& results) {
55 *results_ = results; 54 *results_ = results;
56 quit_closure_.Run(); 55 quit_closure_.Run();
57 } 56 }
58 57
59 base::Closure quit_closure_; 58 base::Closure quit_closure_;
60 zip_analyzer::Results* results_; 59 ArchiveAnalyzerResults* results_;
61 DISALLOW_COPY_AND_ASSIGN(ResultsGetter); 60 DISALLOW_COPY_AND_ASSIGN(ResultsGetter);
62 }; 61 };
63 62
64 SandboxedZipAnalyzerTest() 63 SandboxedZipAnalyzerTest()
65 : browser_thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {} 64 : browser_thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP) {}
66 65
67 void SetUp() override { 66 void SetUp() override {
68 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data_)); 67 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &dir_test_data_));
69 dir_test_data_ = dir_test_data_.AppendASCII("safe_browsing"); 68 dir_test_data_ = dir_test_data_.AppendASCII("safe_browsing");
70 dir_test_data_ = dir_test_data_.AppendASCII("download_protection"); 69 dir_test_data_ = dir_test_data_.AppendASCII("download_protection");
71 } 70 }
72 71
73 // Runs a sandboxed zip analyzer on |file_path|, writing its results into 72 // Runs a sandboxed zip analyzer on |file_path|, writing its results into
74 // |results|. 73 // |results|.
75 void RunAnalyzer(const base::FilePath& file_path, 74 void RunAnalyzer(const base::FilePath& file_path,
76 zip_analyzer::Results* results) { 75 ArchiveAnalyzerResults* results) {
77 DCHECK(results); 76 DCHECK(results);
78 base::RunLoop run_loop; 77 base::RunLoop run_loop;
79 ResultsGetter results_getter(run_loop.QuitClosure(), results); 78 ResultsGetter results_getter(run_loop.QuitClosure(), results);
80 scoped_refptr<SandboxedZipAnalyzer> analyzer( 79 scoped_refptr<SandboxedZipAnalyzer> analyzer(
81 new SandboxedZipAnalyzer(file_path, results_getter.GetCallback())); 80 new SandboxedZipAnalyzer(file_path, results_getter.GetCallback()));
82 analyzer->Start(); 81 analyzer->Start();
83 run_loop.Run(); 82 run_loop.Run();
84 } 83 }
85 84
86 #if defined(OS_WIN) 85 #if defined(OS_WIN)
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 const SandboxedZipAnalyzerTest::BinaryData SandboxedZipAnalyzerTest::kJSEFile = 171 const SandboxedZipAnalyzerTest::BinaryData SandboxedZipAnalyzerTest::kJSEFile =
173 { 172 {
174 "hello.jse", 173 "hello.jse",
175 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE, 174 ClientDownloadRequest_DownloadType_WIN_EXECUTABLE,
176 &kJSEFileDigest[0], 175 &kJSEFileDigest[0],
177 6, 176 6,
178 false, // is_signed 177 false, // is_signed
179 }; 178 };
180 179
181 TEST_F(SandboxedZipAnalyzerTest, NoBinaries) { 180 TEST_F(SandboxedZipAnalyzerTest, NoBinaries) {
182 zip_analyzer::Results results; 181 ArchiveAnalyzerResults results;
183 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_no_binaries.zip"), &results); 182 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_no_binaries.zip"), &results);
184 ASSERT_TRUE(results.success); 183 ASSERT_TRUE(results.success);
185 EXPECT_FALSE(results.has_executable); 184 EXPECT_FALSE(results.has_executable);
186 EXPECT_FALSE(results.has_archive); 185 EXPECT_FALSE(results.has_archive);
187 EXPECT_EQ(0, results.archived_binary.size()); 186 EXPECT_EQ(0, results.archived_binary.size());
188 } 187 }
189 188
190 TEST_F(SandboxedZipAnalyzerTest, OneUnsignedBinary) { 189 TEST_F(SandboxedZipAnalyzerTest, OneUnsignedBinary) {
191 zip_analyzer::Results results; 190 ArchiveAnalyzerResults results;
192 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_one_unsigned_binary.zip"), 191 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_one_unsigned_binary.zip"),
193 &results); 192 &results);
194 ASSERT_TRUE(results.success); 193 ASSERT_TRUE(results.success);
195 EXPECT_TRUE(results.has_executable); 194 EXPECT_TRUE(results.has_executable);
196 EXPECT_FALSE(results.has_archive); 195 EXPECT_FALSE(results.has_archive);
197 ASSERT_EQ(1, results.archived_binary.size()); 196 ASSERT_EQ(1, results.archived_binary.size());
198 ExpectBinary(kUnsignedExe, results.archived_binary.Get(0)); 197 ExpectBinary(kUnsignedExe, results.archived_binary.Get(0));
199 } 198 }
200 199
201 TEST_F(SandboxedZipAnalyzerTest, TwoBinariesOneSigned) { 200 TEST_F(SandboxedZipAnalyzerTest, TwoBinariesOneSigned) {
202 zip_analyzer::Results results; 201 ArchiveAnalyzerResults results;
203 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_two_binaries_one_signed.zip"), 202 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_two_binaries_one_signed.zip"),
204 &results); 203 &results);
205 ASSERT_TRUE(results.success); 204 ASSERT_TRUE(results.success);
206 EXPECT_TRUE(results.has_executable); 205 EXPECT_TRUE(results.has_executable);
207 EXPECT_FALSE(results.has_archive); 206 EXPECT_FALSE(results.has_archive);
208 ASSERT_EQ(2, results.archived_binary.size()); 207 ASSERT_EQ(2, results.archived_binary.size());
209 ExpectBinary(kUnsignedExe, results.archived_binary.Get(0)); 208 ExpectBinary(kUnsignedExe, results.archived_binary.Get(0));
210 ExpectBinary(kSignedExe, results.archived_binary.Get(1)); 209 ExpectBinary(kSignedExe, results.archived_binary.Get(1));
211 } 210 }
212 211
213 TEST_F(SandboxedZipAnalyzerTest, ZippedArchiveNoBinaries) { 212 TEST_F(SandboxedZipAnalyzerTest, ZippedArchiveNoBinaries) {
214 zip_analyzer::Results results; 213 ArchiveAnalyzerResults results;
215 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_archive_no_binaries.zip"), 214 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_archive_no_binaries.zip"),
216 &results); 215 &results);
217 ASSERT_TRUE(results.success); 216 ASSERT_TRUE(results.success);
218 EXPECT_FALSE(results.has_executable); 217 EXPECT_FALSE(results.has_executable);
219 EXPECT_TRUE(results.has_archive); 218 EXPECT_TRUE(results.has_archive);
220 EXPECT_EQ(0, results.archived_binary.size()); 219 EXPECT_EQ(0, results.archived_binary.size());
221 ASSERT_EQ(1u, results.archived_archive_filenames.size()); 220 ASSERT_EQ(1u, results.archived_archive_filenames.size());
222 EXPECT_EQ(FILE_PATH_LITERAL("hello.zip"), 221 EXPECT_EQ(FILE_PATH_LITERAL("hello.zip"),
223 results.archived_archive_filenames[0].value()); 222 results.archived_archive_filenames[0].value());
224 } 223 }
225 224
226 TEST_F(SandboxedZipAnalyzerTest, ZippedRarArchiveNoBinaries) { 225 TEST_F(SandboxedZipAnalyzerTest, ZippedRarArchiveNoBinaries) {
227 zip_analyzer::Results results; 226 ArchiveAnalyzerResults results;
228 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_rar_archive_no_binaries.zip"), 227 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_rar_archive_no_binaries.zip"),
229 &results); 228 &results);
230 ASSERT_TRUE(results.success); 229 ASSERT_TRUE(results.success);
231 EXPECT_FALSE(results.has_executable); 230 EXPECT_FALSE(results.has_executable);
232 EXPECT_TRUE(results.has_archive); 231 EXPECT_TRUE(results.has_archive);
233 EXPECT_EQ(0, results.archived_binary.size()); 232 EXPECT_EQ(0, results.archived_binary.size());
234 ASSERT_EQ(1u, results.archived_archive_filenames.size()); 233 ASSERT_EQ(1u, results.archived_archive_filenames.size());
235 EXPECT_EQ(FILE_PATH_LITERAL("hello.rar"), 234 EXPECT_EQ(FILE_PATH_LITERAL("hello.rar"),
236 results.archived_archive_filenames[0].value()); 235 results.archived_archive_filenames[0].value());
237 } 236 }
238 237
239 TEST_F(SandboxedZipAnalyzerTest, ZippedArchiveAndBinaries) { 238 TEST_F(SandboxedZipAnalyzerTest, ZippedArchiveAndBinaries) {
240 zip_analyzer::Results results; 239 ArchiveAnalyzerResults results;
241 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_archive_and_binaries.zip"), 240 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_archive_and_binaries.zip"),
242 &results); 241 &results);
243 ASSERT_TRUE(results.success); 242 ASSERT_TRUE(results.success);
244 EXPECT_TRUE(results.has_executable); 243 EXPECT_TRUE(results.has_executable);
245 EXPECT_TRUE(results.has_archive); 244 EXPECT_TRUE(results.has_archive);
246 ASSERT_EQ(1, results.archived_binary.size()); 245 ASSERT_EQ(1, results.archived_binary.size());
247 ExpectBinary(kSignedExe, results.archived_binary.Get(0)); 246 ExpectBinary(kSignedExe, results.archived_binary.Get(0));
248 ASSERT_EQ(1u, results.archived_archive_filenames.size()); 247 ASSERT_EQ(1u, results.archived_archive_filenames.size());
249 EXPECT_EQ(FILE_PATH_LITERAL("hello.7z"), 248 EXPECT_EQ(FILE_PATH_LITERAL("hello.7z"),
250 results.archived_archive_filenames[0].value()); 249 results.archived_archive_filenames[0].value());
251 } 250 }
252 251
253 TEST_F(SandboxedZipAnalyzerTest, 252 TEST_F(SandboxedZipAnalyzerTest,
254 ZippedArchiveAndBinariesWithTrailingSpaceAndPeriodChars) { 253 ZippedArchiveAndBinariesWithTrailingSpaceAndPeriodChars) {
255 zip_analyzer::Results results; 254 ArchiveAnalyzerResults results;
256 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_two_binaries_one_archive_" 255 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_two_binaries_one_archive_"
257 "trailing_space_and_period_chars.zip"), 256 "trailing_space_and_period_chars.zip"),
258 &results); 257 &results);
259 ASSERT_TRUE(results.success); 258 ASSERT_TRUE(results.success);
260 EXPECT_TRUE(results.has_executable); 259 EXPECT_TRUE(results.has_executable);
261 EXPECT_TRUE(results.has_archive); 260 EXPECT_TRUE(results.has_archive);
262 ASSERT_EQ(2, results.archived_binary.size()); 261 ASSERT_EQ(2, results.archived_binary.size());
263 262
264 BinaryData SignedExe = kSignedExe; 263 BinaryData SignedExe = kSignedExe;
265 SignedExe.file_basename = "signed.exe "; 264 SignedExe.file_basename = "signed.exe ";
266 BinaryData UnsignedExe = kUnsignedExe; 265 BinaryData UnsignedExe = kUnsignedExe;
267 UnsignedExe.file_basename = "unsigned.exe."; 266 UnsignedExe.file_basename = "unsigned.exe.";
268 ExpectBinary(SignedExe, results.archived_binary.Get(0)); 267 ExpectBinary(SignedExe, results.archived_binary.Get(0));
269 ExpectBinary(UnsignedExe, results.archived_binary.Get(1)); 268 ExpectBinary(UnsignedExe, results.archived_binary.Get(1));
270 ASSERT_EQ(1u, results.archived_archive_filenames.size()); 269 ASSERT_EQ(1u, results.archived_archive_filenames.size());
271 EXPECT_EQ(FILE_PATH_LITERAL("zipfile_no_binaries.zip . . "), 270 EXPECT_EQ(FILE_PATH_LITERAL("zipfile_no_binaries.zip . . "),
272 results.archived_archive_filenames[0].value()); 271 results.archived_archive_filenames[0].value());
273 } 272 }
274 273
275 TEST_F(SandboxedZipAnalyzerTest, ZippedJSEFile) { 274 TEST_F(SandboxedZipAnalyzerTest, ZippedJSEFile) {
276 zip_analyzer::Results results; 275 ArchiveAnalyzerResults results;
277 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_one_jse_file.zip"), &results); 276 RunAnalyzer(dir_test_data_.AppendASCII("zipfile_one_jse_file.zip"), &results);
278 ASSERT_TRUE(results.success); 277 ASSERT_TRUE(results.success);
279 EXPECT_TRUE(results.has_executable); 278 EXPECT_TRUE(results.has_executable);
280 EXPECT_FALSE(results.has_archive); 279 EXPECT_FALSE(results.has_archive);
281 ASSERT_EQ(1, results.archived_binary.size()); 280 ASSERT_EQ(1, results.archived_binary.size());
282 ExpectBinary(kJSEFile, results.archived_binary.Get(0)); 281 ExpectBinary(kJSEFile, results.archived_binary.Get(0));
283 EXPECT_TRUE(results.archived_archive_filenames.empty()); 282 EXPECT_TRUE(results.archived_archive_filenames.empty());
284 } 283 }
285 284
286 } // namespace safe_browsing 285 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « chrome/browser/safe_browsing/sandboxed_zip_analyzer.cc ('k') | chrome/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698