blob: b62fa5ccd7377e7dbf726277b0c688ed9fa7952a [file] [log] [blame]
// 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;
};