| /* |
| * Copyright (c) 2018 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/platform_file.h" |
| #include "test/gtest.h" |
| #include "test/testsupport/file_utils.h" |
| |
| namespace rtc { |
| |
| void FillWithDummyDataAndClose(FILE* const file, const std::string& filename) { |
| EXPECT_GT(fprintf(file, "%s", "Dummy data"), 0) |
| << "Failed to write to file: " << filename; |
| fclose(file); |
| } |
| |
| TEST(PlatformFileTest, CreateWriteAndDelete) { |
| const std::string filename = webrtc::test::GenerateTempFilename( |
| webrtc::test::OutputPath(), ".testfile"); |
| const PlatformFile fd = rtc::CreatePlatformFile(filename); |
| ASSERT_NE(fd, rtc::kInvalidPlatformFileValue) |
| << "Failed to create file descriptor for file: " << filename; |
| FILE* const file = rtc::FdopenPlatformFile(fd, "w"); |
| ASSERT_TRUE(file != nullptr) << "Failed to open file: " << filename; |
| FillWithDummyDataAndClose(file, filename); |
| webrtc::test::RemoveFile(filename); |
| } |
| |
| TEST(PlatformFileTest, OpenExistingWriteAndDelete) { |
| const std::string filename = webrtc::test::GenerateTempFilename( |
| webrtc::test::OutputPath(), ".testfile"); |
| |
| // Create file with dummy data. |
| FILE* file = fopen(filename.c_str(), "wb"); |
| ASSERT_TRUE(file != nullptr) << "Failed to open file: " << filename; |
| FillWithDummyDataAndClose(file, filename); |
| |
| // Open it for write, write and delete. |
| const PlatformFile fd = rtc::OpenPlatformFile(filename); |
| ASSERT_NE(fd, rtc::kInvalidPlatformFileValue) |
| << "Failed to open file descriptor for file: " << filename; |
| file = rtc::FdopenPlatformFile(fd, "w"); |
| ASSERT_TRUE(file != nullptr) << "Failed to open file: " << filename; |
| FillWithDummyDataAndClose(file, filename); |
| webrtc::test::RemoveFile(filename); |
| } |
| |
| TEST(PlatformFileTest, OpenExistingReadOnlyAndDelete) { |
| const std::string filename = webrtc::test::GenerateTempFilename( |
| webrtc::test::OutputPath(), ".testfile"); |
| |
| // Create file with dummy data. |
| FILE* file = fopen(filename.c_str(), "wb"); |
| ASSERT_TRUE(file != nullptr) << "Failed to open file: " << filename; |
| FillWithDummyDataAndClose(file, filename); |
| |
| // Open it for read, read and delete. |
| const PlatformFile fd = rtc::OpenPlatformFileReadOnly(filename); |
| ASSERT_NE(fd, rtc::kInvalidPlatformFileValue) |
| << "Failed to open file descriptor for file: " << filename; |
| file = rtc::FdopenPlatformFile(fd, "r"); |
| ASSERT_TRUE(file != nullptr) << "Failed to open file: " << filename; |
| |
| int buf[]{0}; |
| ASSERT_GT(fread(&buf, 1, 1, file), 0u) |
| << "Failed to read from file: " << filename; |
| fclose(file); |
| webrtc::test::RemoveFile(filename); |
| } |
| |
| } // namespace rtc |