blob: 41047727536767cdf0827d477121cb200d723d10 [file] [log] [blame] [edit]
// 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
#include <fbl/unique_ptr.h>
#include <limits.h>
#include <stdlib.h>
#include <zircon/types.h>
enum class TraversalOrder : int {
kDefault, // forward (default) order
kReverse, // reverse order
kRandom, // random order
kFirst, // first 100
kLast, // last 100
kCount, // number of order options
};
enum class TestName : int {
kCreate, // create blob
kTruncate, // truncate blob
kWrite, // write data to blob
kOpen, // open fd to blob
kRead, // read data from blob
kClose, // close blob fd
kUnlink, // unlink blob
kNegativeLookup, // look up non existing blob
kCount, // number of name options
};
// An in-memory representation of a blob.
struct BlobInfo {
char path[PATH_MAX];
fbl::unique_ptr<char[]> merkle;
size_t size_merkle;
fbl::unique_ptr<char[]> data;
size_t size_data;
};
class TestData {
public:
TestData(size_t blob_size, size_t blob_count, TraversalOrder order);
~TestData();
bool RunTests();
private:
// setup
void GenerateOrder();
size_t GetMaxCount();
void GetNameStr(TestName name, char* name_str);
void GetOrderStr(char* order_str);
void PrintOrder();
// reporting
inline void SampleEnd(zx_time_t start, TestName name, size_t index);
bool ReportTest(TestName name);
// tests
bool CreateBlobs();
bool ReadBlobs();
bool UnlinkBlobs();
bool Sync();
// state
size_t* indices_;
zx_time_t** samples_;
char** paths_;
size_t blob_size_;
size_t blob_count_;
TraversalOrder order_;
};