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

Side by Side Diff: courgette/encode_decode_unittest.cc

Issue 1629703002: [Courgette] Refactor: Manage AssemblyProgram and EncodedProgram with scoped_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix courgette_fuzzer in libfuzzer. Created 4 years, 10 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 | « courgette/disassembler.cc ('k') | courgette/encoded_program.h » ('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 (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include "base/memory/scoped_ptr.h"
8 #include "courgette/assembly_program.h"
7 #include "courgette/base_test_unittest.h" 9 #include "courgette/base_test_unittest.h"
8 #include "courgette/courgette.h" 10 #include "courgette/courgette.h"
11 #include "courgette/encoded_program.h"
12 #include "courgette/program_detector.h"
9 #include "courgette/streams.h" 13 #include "courgette/streams.h"
10 14
11 class EncodeDecodeTest : public BaseTest { 15 class EncodeDecodeTest : public BaseTest {
12 public: 16 public:
13 void TestAssembleToStreamDisassemble(std::string file, 17 void TestAssembleToStreamDisassemble(std::string file,
14 size_t expected_encoded_lenth) const; 18 size_t expected_encoded_lenth) const;
15 }; 19 };
16 20
17 void EncodeDecodeTest::TestAssembleToStreamDisassemble( 21 void EncodeDecodeTest::TestAssembleToStreamDisassemble(
18 std::string file, 22 std::string file,
19 size_t expected_encoded_lenth) const { 23 size_t expected_encoded_lenth) const {
20 const void* original_buffer = file.c_str(); 24 const void* original_buffer = file.c_str();
21 size_t original_length = file.length(); 25 size_t original_length = file.length();
22 26
23 courgette::AssemblyProgram* program = NULL; 27 scoped_ptr<courgette::AssemblyProgram> program;
24 const courgette::Status parse_status = 28 const courgette::Status parse_status =
25 courgette::ParseDetectedExecutable(original_buffer, 29 courgette::ParseDetectedExecutable(original_buffer,
26 original_length, 30 original_length,
27 &program); 31 &program);
28 EXPECT_EQ(courgette::C_OK, parse_status); 32 EXPECT_EQ(courgette::C_OK, parse_status);
29 33
30 courgette::EncodedProgram* encoded = NULL; 34 scoped_ptr<courgette::EncodedProgram> encoded;
31 35 const courgette::Status encode_status = Encode(*program, &encoded);
32 const courgette::Status encode_status = Encode(program, &encoded);
33 EXPECT_EQ(courgette::C_OK, encode_status); 36 EXPECT_EQ(courgette::C_OK, encode_status);
34 37
35 DeleteAssemblyProgram(program); 38 program.reset();
36 39
37 courgette::SinkStreamSet sinks; 40 courgette::SinkStreamSet sinks;
38 const courgette::Status write_status = WriteEncodedProgram(encoded, &sinks); 41 const courgette::Status write_status =
42 WriteEncodedProgram(encoded.get(), &sinks);
39 EXPECT_EQ(courgette::C_OK, write_status); 43 EXPECT_EQ(courgette::C_OK, write_status);
40 44
41 DeleteEncodedProgram(encoded); 45 encoded.reset();
42 46
43 courgette::SinkStream sink; 47 courgette::SinkStream sink;
44 bool can_collect = sinks.CopyTo(&sink); 48 bool can_collect = sinks.CopyTo(&sink);
45 EXPECT_TRUE(can_collect); 49 EXPECT_TRUE(can_collect);
46 50
47 const void* buffer = sink.Buffer(); 51 const void* buffer = sink.Buffer();
48 size_t length = sink.Length(); 52 size_t length = sink.Length();
49 53
50 EXPECT_EQ(expected_encoded_lenth, length); 54 EXPECT_EQ(expected_encoded_lenth, length);
51 55
52 courgette::SourceStreamSet sources; 56 courgette::SourceStreamSet sources;
53 bool can_get_source_streams = sources.Init(buffer, length); 57 bool can_get_source_streams = sources.Init(buffer, length);
54 EXPECT_TRUE(can_get_source_streams); 58 EXPECT_TRUE(can_get_source_streams);
55 59
56 courgette::EncodedProgram *encoded2 = NULL; 60 scoped_ptr<courgette::EncodedProgram> encoded2;
57 const courgette::Status read_status = ReadEncodedProgram(&sources, &encoded2); 61 const courgette::Status read_status = ReadEncodedProgram(&sources, &encoded2);
58 EXPECT_EQ(courgette::C_OK, read_status); 62 EXPECT_EQ(courgette::C_OK, read_status);
59 63
60 courgette::SinkStream assembled; 64 courgette::SinkStream assembled;
61 const courgette::Status assemble_status = Assemble(encoded2, &assembled); 65 const courgette::Status assemble_status =
66 Assemble(encoded2.get(), &assembled);
62 EXPECT_EQ(courgette::C_OK, assemble_status); 67 EXPECT_EQ(courgette::C_OK, assemble_status);
63 68
69 encoded2.reset();
70
64 const void* assembled_buffer = assembled.Buffer(); 71 const void* assembled_buffer = assembled.Buffer();
65 size_t assembled_length = assembled.Length(); 72 size_t assembled_length = assembled.Length();
66 73
67 EXPECT_EQ(original_length, assembled_length); 74 EXPECT_EQ(original_length, assembled_length);
68 EXPECT_EQ(0, memcmp(original_buffer, assembled_buffer, original_length)); 75 EXPECT_EQ(0, memcmp(original_buffer, assembled_buffer, original_length));
69
70 DeleteEncodedProgram(encoded2);
71 } 76 }
72 77
73 TEST_F(EncodeDecodeTest, PE) { 78 TEST_F(EncodeDecodeTest, PE) {
74 std::string file = FileContents("setup1.exe"); 79 std::string file = FileContents("setup1.exe");
75 TestAssembleToStreamDisassemble(file, 972845); 80 TestAssembleToStreamDisassemble(file, 972845);
76 } 81 }
77 82
78 TEST_F(EncodeDecodeTest, PE64) { 83 TEST_F(EncodeDecodeTest, PE64) {
79 std::string file = FileContents("chrome64_1.exe"); 84 std::string file = FileContents("chrome64_1.exe");
80 TestAssembleToStreamDisassemble(file, 809635); 85 TestAssembleToStreamDisassemble(file, 809635);
81 } 86 }
82 87
83 TEST_F(EncodeDecodeTest, Elf_Small) { 88 TEST_F(EncodeDecodeTest, Elf_Small) {
84 std::string file = FileContents("elf-32-1"); 89 std::string file = FileContents("elf-32-1");
85 TestAssembleToStreamDisassemble(file, 136218); 90 TestAssembleToStreamDisassemble(file, 136218);
86 } 91 }
87 92
88 TEST_F(EncodeDecodeTest, Elf_HighBSS) { 93 TEST_F(EncodeDecodeTest, Elf_HighBSS) {
89 std::string file = FileContents("elf-32-high-bss"); 94 std::string file = FileContents("elf-32-high-bss");
90 TestAssembleToStreamDisassemble(file, 7312); 95 TestAssembleToStreamDisassemble(file, 7312);
91 } 96 }
OLDNEW
« no previous file with comments | « courgette/disassembler.cc ('k') | courgette/encoded_program.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698