/* * Copyright 2021 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #include "rtc_base/system/file_wrapper.h" #include "rtc_base/checks.h" #include "test/gtest.h" #include "test/testsupport/file_utils.h" namespace webrtc { TEST(FileWrapper, FileSize) { auto test_info = ::testing::UnitTest::GetInstance()->current_test_info(); std::string test_name = std::string(test_info->test_case_name()) + "_" + test_info->name(); std::replace(test_name.begin(), test_name.end(), '/', '_'); const std::string temp_filename = test::OutputPathWithRandomDirectory() + test_name; // Write { FileWrapper file = FileWrapper::OpenWriteOnly(temp_filename); ASSERT_TRUE(file.is_open()); EXPECT_EQ(file.FileSize(), 0); EXPECT_TRUE(file.Write("foo", 3)); EXPECT_EQ(file.FileSize(), 3); // FileSize() doesn't change the file size. EXPECT_EQ(file.FileSize(), 3); // FileSize() doesn't move the write position. EXPECT_TRUE(file.Write("bar", 3)); EXPECT_EQ(file.FileSize(), 6); } // Read { FileWrapper file = FileWrapper::OpenReadOnly(temp_filename); ASSERT_TRUE(file.is_open()); EXPECT_EQ(file.FileSize(), 6); char buf[10]; size_t bytes_read = file.Read(buf, 3); EXPECT_EQ(bytes_read, 3u); EXPECT_EQ(memcmp(buf, "foo", 3), 0); // FileSize() doesn't move the read position. EXPECT_EQ(file.FileSize(), 6); // Attempting to read past the end reads what is available // and sets the EOF flag. bytes_read = file.Read(buf, 5); EXPECT_EQ(bytes_read, 3u); EXPECT_EQ(memcmp(buf, "bar", 3), 0); EXPECT_TRUE(file.ReadEof()); } // Clean up temporary file. remove(temp_filename.c_str()); } } // namespace webrtc