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

Unified Diff: courgette/encoded_program_fuzz_unittest.cc

Issue 2827103002: [Courgette] Refactor: Add CourgetteFlow; improve courgette_tool.cc help text. (Closed)
Patch Set: Add virtual destructor to BasicBuffer and its implementations. Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « courgette/encode_decode_unittest.cc ('k') | courgette/patch_generator_x86_32.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: courgette/encoded_program_fuzz_unittest.cc
diff --git a/courgette/encoded_program_fuzz_unittest.cc b/courgette/encoded_program_fuzz_unittest.cc
index be32adf24ab9cf4481e7a7bd7d0660d33129aed2..10828351632637404a0be98b7736be831b918871 100644
--- a/courgette/encoded_program_fuzz_unittest.cc
+++ b/courgette/encoded_program_fuzz_unittest.cc
@@ -17,10 +17,9 @@
#include <memory>
#include "base/test/test_suite.h"
-#include "courgette/assembly_program.h"
#include "courgette/base_test_unittest.h"
#include "courgette/courgette.h"
-#include "courgette/program_detector.h"
+#include "courgette/courgette_flow.h"
#include "courgette/streams.h"
class DecodeFuzzTest : public BaseTest {
@@ -41,32 +40,36 @@ class DecodeFuzzTest : public BaseTest {
void DecodeFuzzTest::FuzzExe(const char* file_name) const {
std::string file1 = FileContents(file_name);
- const uint8_t* original_buffer =
- reinterpret_cast<const uint8_t*>(file1.data());
+ const uint8_t* original_data = reinterpret_cast<const uint8_t*>(file1.data());
size_t original_length = file1.length();
+ courgette::CourgetteFlow flow;
- std::unique_ptr<courgette::AssemblyProgram> program;
- const courgette::Status parse_status =
- courgette::ParseDetectedExecutable(original_buffer, original_length,
- &program);
- EXPECT_EQ(courgette::C_OK, parse_status);
+ courgette::RegionBuffer original_buffer(
+ courgette::Region(original_data, original_length));
+ flow.ReadAssemblyProgramFromBuffer(flow.ONLY, original_buffer, false);
+ EXPECT_EQ(courgette::C_OK, flow.status());
+ EXPECT_TRUE(nullptr != flow.data(flow.ONLY)->program.get());
- std::unique_ptr<courgette::EncodedProgram> encoded;
- const courgette::Status encode_status = Encode(*program, &encoded);
- EXPECT_EQ(courgette::C_OK, encode_status);
+ flow.CreateEncodedProgramFromAssemblyProgram(flow.ONLY);
+ EXPECT_EQ(courgette::C_OK, flow.status());
+ EXPECT_TRUE(nullptr != flow.data(flow.ONLY)->encoded.get());
- program.reset();
+ flow.DestroyAssemblyProgram(flow.ONLY);
+ EXPECT_EQ(courgette::C_OK, flow.status());
+ EXPECT_TRUE(nullptr == flow.data(flow.ONLY)->program.get());
- courgette::SinkStreamSet sinks;
- const courgette::Status write_status =
- WriteEncodedProgram(encoded.get(), &sinks);
- EXPECT_EQ(courgette::C_OK, write_status);
+ flow.WriteSinkStreamSetFromEncodedProgram(flow.ONLY);
+ EXPECT_EQ(courgette::C_OK, flow.status());
- encoded.reset();
+ flow.DestroyEncodedProgram(flow.ONLY);
+ EXPECT_EQ(courgette::C_OK, flow.status());
+ EXPECT_TRUE(nullptr == flow.data(flow.ONLY)->encoded.get());
courgette::SinkStream sink;
- bool can_collect = sinks.CopyTo(&sink);
- EXPECT_TRUE(can_collect);
+ flow.WriteSinkStreamFromSinkStreamSet(flow.ONLY, &sink);
+ EXPECT_EQ(courgette::C_OK, flow.status());
+ EXPECT_TRUE(flow.ok());
+ EXPECT_FALSE(flow.failed());
size_t length = sink.Length();
@@ -173,34 +176,27 @@ void DecodeFuzzTest::FuzzBits(const std::string& base_buffer,
}
}
-bool DecodeFuzzTest::TryAssemble(const std::string& buffer,
+bool DecodeFuzzTest::TryAssemble(const std::string& file,
std::string* output) const {
- std::unique_ptr<courgette::EncodedProgram> encoded;
- bool result = false;
-
- courgette::SourceStreamSet sources;
- bool can_get_source_streams = sources.Init(buffer.c_str(), buffer.length());
- if (can_get_source_streams) {
- const courgette::Status read_status =
- ReadEncodedProgram(&sources, &encoded);
- if (read_status == courgette::C_OK) {
- courgette::SinkStream assembled;
- const courgette::Status assemble_status =
- Assemble(encoded.get(), &assembled);
-
- if (assemble_status == courgette::C_OK) {
- const void* assembled_buffer = assembled.Buffer();
- size_t assembled_length = assembled.Length();
-
- output->clear();
- output->assign(reinterpret_cast<const char*>(assembled_buffer),
- assembled_length);
- result = true;
- }
- }
- }
+ courgette::CourgetteFlow flow;
+ courgette::RegionBuffer file_buffer(courgette::Region(
+ reinterpret_cast<const uint8_t*>(file.data()), file.length()));
+ flow.ReadSourceStreamSetFromBuffer(flow.ONLY, file_buffer);
+ if (flow.failed())
+ return false;
+
+ flow.ReadEncodedProgramFromSourceStreamSet(flow.ONLY);
+ if (flow.failed())
+ return false;
+
+ courgette::SinkStream sink;
+ flow.WriteExecutableFromEncodedProgram(flow.ONLY, &sink);
+ if (flow.failed())
+ return false;
- return result;
+ output->clear();
+ output->assign(reinterpret_cast<const char*>(sink.Buffer()), sink.Length());
+ return true;
}
TEST_F(DecodeFuzzTest, All) {
« no previous file with comments | « courgette/encode_decode_unittest.cc ('k') | courgette/patch_generator_x86_32.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698