blob: 4c272c8d33c4913374443d1f38550ab3d19e4a36 [file] [log] [blame]
// Copyright 2019 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.
#ifndef ZIRCON_SYSTEM_ULIB_BLOBFS_TEST_BLOB_UTILS_H_
#define ZIRCON_SYSTEM_ULIB_BLOBFS_TEST_BLOB_UTILS_H_
#include <lib/fdio/io.h>
#include <memory>
#include <string>
namespace blobfs {
using BlobSrcFunction = void (*)(char* data, size_t length);
// An in-memory representation of a blob.
struct BlobInfo {
char path[PATH_MAX];
std::unique_ptr<char[]> merkle;
size_t size_merkle;
std::unique_ptr<char[]> data;
size_t size_data;
};
template <typename T, typename U>
int StreamAll(T func, int fd, U* buf, size_t max) {
size_t n = 0;
while (n != max) {
ssize_t d = func(fd, &buf[n], max - n);
if (d < 0) {
return -1;
}
n += d;
}
return 0;
}
// Fills the provided buffer with random data. The contents of the buffer are
// repeatable for any iteration of the test, provided that srand() is seeded with
// the test framework's seed.
void RandomFill(char* data, size_t length);
// Generates a blob with data generated by a user-provided function.
void GenerateBlob(BlobSrcFunction data_generator, const std::string& mount_path, size_t data_size,
std::unique_ptr<BlobInfo>* out);
// Generates a blob with random data.
void GenerateRandomBlob(const std::string& mount_path, size_t data_size, std::unique_ptr<BlobInfo>* out);
// Verifies that a file contains the data in the provided buffer.
void VerifyContents(int fd, const char* data, size_t data_size);
} // namespace blobfs
#endif // ZIRCON_SYSTEM_ULIB_BLOBFS_TEST_BLOB_UTILS_H_