1 /* 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "webrtc/base/fileutils.h" 12 #include "webrtc/base/gunit.h" 13 #include "webrtc/base/pathutils.h" 14 #include "webrtc/base/stream.h" 15 16 namespace rtc { 17 18 // Make sure we can get a temp folder for the later tests. 19 TEST(FilesystemTest, GetTemporaryFolder) { 20 Pathname path; 21 EXPECT_TRUE(Filesystem::GetTemporaryFolder(path, true, NULL)); 22 } 23 24 // Test creating a temp file, reading it back in, and deleting it. 25 TEST(FilesystemTest, TestOpenFile) { 26 Pathname path; 27 EXPECT_TRUE(Filesystem::GetTemporaryFolder(path, true, NULL)); 28 path.SetPathname(Filesystem::TempFilename(path, "ut")); 29 30 FileStream* fs; 31 char buf[256]; 32 size_t bytes; 33 34 fs = Filesystem::OpenFile(path, "wb"); 35 ASSERT_TRUE(fs != NULL); 36 EXPECT_EQ(SR_SUCCESS, fs->Write("test", 4, &bytes, NULL)); 37 EXPECT_EQ(4U, bytes); 38 delete fs; 39 40 EXPECT_TRUE(Filesystem::IsFile(path)); 41 42 fs = Filesystem::OpenFile(path, "rb"); 43 ASSERT_TRUE(fs != NULL); 44 EXPECT_EQ(SR_SUCCESS, fs->Read(buf, sizeof(buf), &bytes, NULL)); 45 EXPECT_EQ(4U, bytes); 46 delete fs; 47 48 EXPECT_TRUE(Filesystem::DeleteFile(path)); 49 EXPECT_FALSE(Filesystem::IsFile(path)); 50 } 51 52 // Test opening a non-existent file. 53 TEST(FilesystemTest, TestOpenBadFile) { 54 Pathname path; 55 EXPECT_TRUE(Filesystem::GetTemporaryFolder(path, true, NULL)); 56 path.SetFilename("not an actual file"); 57 58 EXPECT_FALSE(Filesystem::IsFile(path)); 59 60 FileStream* fs = Filesystem::OpenFile(path, "rb"); 61 EXPECT_FALSE(fs != NULL); 62 } 63 64 // Test that CreatePrivateFile fails for existing files and succeeds for 65 // non-existent ones. 66 TEST(FilesystemTest, TestCreatePrivateFile) { 67 Pathname path; 68 EXPECT_TRUE(Filesystem::GetTemporaryFolder(path, true, NULL)); 69 path.SetFilename("private_file_test"); 70 71 // First call should succeed because the file doesn't exist yet. 72 EXPECT_TRUE(Filesystem::CreatePrivateFile(path)); 73 // Next call should fail, because now it exists. 74 EXPECT_FALSE(Filesystem::CreatePrivateFile(path)); 75 76 // Verify that we have permission to open the file for reading and writing. 77 scoped_ptr<FileStream> fs(Filesystem::OpenFile(path, "wb")); 78 EXPECT_TRUE(fs.get() != NULL); 79 // Have to close the file on Windows before it will let us delete it. 80 fs.reset(); 81 82 // Verify that we have permission to delete the file. 83 EXPECT_TRUE(Filesystem::DeleteFile(path)); 84 } 85 86 // Test checking for free disk space. 87 TEST(FilesystemTest, TestGetDiskFreeSpace) { 88 // Note that we should avoid picking any file/folder which could be located 89 // at the remotely mounted drive/device. 90 Pathname path; 91 ASSERT_TRUE(Filesystem::GetAppDataFolder(&path, true)); 92 93 int64 free1 = 0; 94 EXPECT_TRUE(Filesystem::IsFolder(path)); 95 EXPECT_FALSE(Filesystem::IsFile(path)); 96 EXPECT_TRUE(Filesystem::GetDiskFreeSpace(path, &free1)); 97 EXPECT_GT(free1, 0); 98 99 int64 free2 = 0; 100 path.AppendFolder("this_folder_doesnt_exist"); 101 EXPECT_FALSE(Filesystem::IsFolder(path)); 102 EXPECT_TRUE(Filesystem::IsAbsent(path)); 103 EXPECT_TRUE(Filesystem::GetDiskFreeSpace(path, &free2)); 104 // These should be the same disk, and disk free space should not have changed 105 // by more than 1% between the two calls. 106 EXPECT_LT(static_cast<int64>(free1 * .9), free2); 107 EXPECT_LT(free2, static_cast<int64>(free1 * 1.1)); 108 109 int64 free3 = 0; 110 path.clear(); 111 EXPECT_TRUE(path.empty()); 112 EXPECT_TRUE(Filesystem::GetDiskFreeSpace(path, &free3)); 113 // Current working directory may not be where exe is. 114 // EXPECT_LT(static_cast<int64>(free1 * .9), free3); 115 // EXPECT_LT(free3, static_cast<int64>(free1 * 1.1)); 116 EXPECT_GT(free3, 0); 117 } 118 119 // Tests that GetCurrentDirectory() returns something. 120 TEST(FilesystemTest, TestGetCurrentDirectory) { 121 EXPECT_FALSE(Filesystem::GetCurrentDirectory().empty()); 122 } 123 124 // Tests that GetAppPathname returns something. 125 TEST(FilesystemTest, TestGetAppPathname) { 126 Pathname path; 127 EXPECT_TRUE(Filesystem::GetAppPathname(&path)); 128 EXPECT_FALSE(path.empty()); 129 } 130 131 } // namespace rtc 132