/*
- * Copyright 2013 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* limitations under the License.
*/
-#include "folly/io/RecordIO.h"
+#include <folly/io/RecordIO.h>
#include <sys/types.h>
-#include <unistd.h>
#include <random>
-#include <gflags/gflags.h>
#include <glog/logging.h>
-#include <gtest/gtest.h>
-#include "folly/Conv.h"
-#include "folly/FBString.h"
-#include "folly/Random.h"
-#include "folly/experimental/TestUtil.h"
-#include "folly/io/IOBufQueue.h"
+#include <folly/Conv.h>
+#include <folly/FBString.h>
+#include <folly/Random.h>
+#include <folly/experimental/TestUtil.h>
+#include <folly/io/IOBufQueue.h>
+#include <folly/portability/GFlags.h>
+#include <folly/portability/GTest.h>
+#include <folly/portability/Unistd.h>
DEFINE_int32(random_seed, folly::randomNumberSeed(), "random seed");
-namespace folly { namespace test {
+namespace folly {
+namespace test {
namespace {
// shortcut
-ByteRange br(StringPiece sp) { return ByteRange(sp); }
StringPiece sp(ByteRange br) { return StringPiece(br); }
template <class T>
return queue.move();
}
-} // namespace
+} // namespace
TEST(RecordIOTest, Simple) {
TemporaryFile file;
{
- RecordIOWriter writer(file.fd());
+ RecordIOWriter writer(File(file.fd()));
writer.write(iobufs({"hello ", "world"}));
writer.write(iobufs({"goodbye"}));
}
{
- RecordIOReader reader(file.fd());
+ RecordIOReader reader(File(file.fd()));
auto it = reader.begin();
ASSERT_FALSE(it == reader.end());
EXPECT_EQ("hello world", sp((it++)->first));
EXPECT_TRUE(it == reader.end());
}
{
- RecordIOWriter writer(file.fd());
+ RecordIOWriter writer(File(file.fd()));
writer.write(iobufs({"meow"}));
writer.write(iobufs({"woof"}));
}
{
- RecordIOReader reader(file.fd());
+ RecordIOReader reader(File(file.fd()));
auto it = reader.begin();
ASSERT_FALSE(it == reader.end());
EXPECT_EQ("hello world", sp((it++)->first));
memset(tmp, 'x', kSize);
TemporaryFile file;
{
- RecordIOWriter writer(file.fd());
- for (int i = 0; i < kSize; ++i) { // record of size 0 should be ignored
+ RecordIOWriter writer(File(file.fd()));
+ for (size_t i = 0; i < kSize; ++i) { // record of size 0 should be ignored
writer.write(IOBuf::wrapBuffer(tmp, i));
}
}
{
- RecordIOReader reader(file.fd());
+ RecordIOReader reader(File(file.fd()));
auto it = reader.begin();
- for (int i = 1; i < kSize; ++i) {
+ for (size_t i = 1; i < kSize; ++i) {
ASSERT_FALSE(it == reader.end());
EXPECT_EQ(StringPiece(tmp, i), sp((it++)->first));
}
TEST(RecordIOTest, MultipleFileIds) {
TemporaryFile file;
{
- RecordIOWriter writer(file.fd(), 1);
+ RecordIOWriter writer(File(file.fd()), 1);
writer.write(iobufs({"hello"}));
}
{
- RecordIOWriter writer(file.fd(), 2);
+ RecordIOWriter writer(File(file.fd()), 2);
writer.write(iobufs({"world"}));
}
{
- RecordIOWriter writer(file.fd(), 1);
+ RecordIOWriter writer(File(file.fd()), 1);
writer.write(iobufs({"goodbye"}));
}
{
- RecordIOReader reader(file.fd(), 0); // return all
+ RecordIOReader reader(File(file.fd()), 0); // return all
auto it = reader.begin();
ASSERT_FALSE(it == reader.end());
EXPECT_EQ("hello", sp((it++)->first));
EXPECT_TRUE(it == reader.end());
}
{
- RecordIOReader reader(file.fd(), 1);
+ RecordIOReader reader(File(file.fd()), 1);
auto it = reader.begin();
ASSERT_FALSE(it == reader.end());
EXPECT_EQ("hello", sp((it++)->first));
EXPECT_TRUE(it == reader.end());
}
{
- RecordIOReader reader(file.fd(), 2);
+ RecordIOReader reader(File(file.fd()), 2);
auto it = reader.begin();
ASSERT_FALSE(it == reader.end());
EXPECT_EQ("world", sp((it++)->first));
EXPECT_TRUE(it == reader.end());
}
{
- RecordIOReader reader(file.fd(), 3);
+ RecordIOReader reader(File(file.fd()), 3);
auto it = reader.begin();
EXPECT_TRUE(it == reader.end());
}
TEST(RecordIOTest, ExtraMagic) {
TemporaryFile file;
{
- RecordIOWriter writer(file.fd());
+ RecordIOWriter writer(File(file.fd()));
writer.write(iobufs({"hello"}));
}
uint8_t buf[recordio_helpers::headerSize() + 5];
// and an extra record
EXPECT_EQ(sizeof(buf), write(file.fd(), buf, sizeof(buf)));
{
- RecordIOReader reader(file.fd());
+ RecordIOReader reader(File(file.fd()));
auto it = reader.begin();
ASSERT_FALSE(it == reader.end());
EXPECT_EQ("hello", sp((it++)->first));
++val;
EXPECT_EQ(1, pwrite(fd, &val, 1, pos));
}
-} // namespace
+} // namespace
TEST(RecordIOTest, Randomized) {
SCOPED_TRACE(to<std::string>("Random seed is ", FLAGS_random_seed));
// Recreate the writer multiple times so we test that we create a
// continuous stream
for (size_t i = 0; i < 3; ++i) {
- RecordIOWriter writer(file.fd());
+ RecordIOWriter writer(File(file.fd()));
for (size_t j = 0; j < recordCount; ++j) {
off_t beginPos = writer.filePos();
record.clear();
{
size_t i = 0;
- RecordIOReader reader(file.fd());
+ RecordIOReader reader(File(file.fd()));
for (auto& r : reader) {
SCOPED_TRACE(i);
ASSERT_LT(i, records.size());
EXPECT_EQ(records.size(), i);
}
}
+} // namespace test
+} // namespace folly
-}} // namespaces
int main(int argc, char *argv[]) {
testing::InitGoogleTest(&argc, argv);
- google::ParseCommandLineFlags(&argc, &argv, true);
+ gflags::ParseCommandLineFlags(&argc, &argv, true);
return RUN_ALL_TESTS();
}
-