|  | /* | 
|  | *  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 |