| // Copyright 2017 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| constexpr size_t B = (1); |
| constexpr size_t KB = (1 << 10); |
| constexpr size_t MB = (1 << 20); |
| |
| typedef enum { |
| DEFAULT, // forward (default) order |
| REVERSE, // reverse order |
| RANDOM, // random order |
| FIRST, // first 100 |
| LAST, // last 100 |
| ORDER_COUNT, // number of order options |
| } traversal_order_t; |
| |
| typedef enum { |
| CREATE, // create blob |
| TRUNCATE, // truncate blob |
| WRITE, // write data to blob |
| OPEN, // open fd to blob |
| READ, // read data from blob |
| CLOSE, // close blob fd |
| UNLINK, // unlink blob |
| NAME_COUNT // number of name options |
| } test_name_t; |
| |
| // An in-memory representation of a blob. |
| typedef struct blob_info { |
| char path[PATH_MAX]; |
| fbl::unique_ptr<char[]> merkle; |
| size_t size_merkle; |
| fbl::unique_ptr<char[]> data; |
| size_t size_data; |
| } blob_info_t; |
| |
| class TestData { |
| public: |
| TestData(size_t blob_size, size_t blob_count, traversal_order_t order); |
| ~TestData(); |
| bool run_tests(); |
| private: |
| // setup |
| void generate_order(); |
| size_t get_max_count(); |
| void get_name_str(test_name_t name, char* name_str); |
| void get_order_str(char* order_str); |
| void print_order(); |
| |
| // reporting |
| inline void sample_end(zx_time_t start, test_name_t name, size_t index); |
| bool report_test(test_name_t name); |
| |
| // tests |
| bool create_blobs(); |
| bool read_blobs(); |
| bool unlink_blobs(); |
| |
| // state |
| size_t blob_size; |
| size_t blob_count; |
| traversal_order_t order; |
| size_t* indices; |
| zx_time_t** samples; |
| char** paths; |
| }; |