1 // Copyright 2014 The Android Open Source Project 2 // 3 // This software is licensed under the terms of the GNU General Public 4 // License version 2, as published by the Free Software Foundation, and 5 // may be copied, distributed, and modified under those terms. 6 // 7 // This program is distributed in the hope that it will be useful, 8 // but WITHOUT ANY WARRANTY; without even the implied warranty of 9 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 // GNU General Public License for more details. 11 12 #include "android/filesystems/partition_types.h" 13 14 #include "android/base/EintrWrapper.h" 15 #include "android/base/files/ScopedStdioFile.h" 16 #include "android/filesystems/ext4_utils.h" 17 #include "android/filesystems/testing/TestExt4ImageHeader.h" 18 #include "android/filesystems/testing/TestSupport.h" 19 20 #include "android/utils/path.h" 21 22 #include <gtest/gtest.h> 23 24 #include <stdio.h> 25 #include <string> 26 #include <unistd.h> 27 28 namespace { 29 30 using android::base::ScopedStdioFile; 31 32 class TempPartition { 33 public: 34 TempPartition() { 35 mPath = android::testing::CreateTempFilePath(); 36 } 37 38 ~TempPartition() { 39 if (!mPath.empty()) { 40 HANDLE_EINTR(::unlink(mPath.c_str())); 41 } 42 } 43 44 const char* GetPath() const { 45 return mPath.c_str(); 46 } 47 48 protected: 49 std::string mPath; 50 }; 51 52 } // namespace 53 54 TEST(AndroidPartitionType, ToString) { 55 EXPECT_STREQ( 56 "unknown", 57 androidPartitionType_toString(ANDROID_PARTITION_TYPE_UNKNOWN)); 58 EXPECT_STREQ( 59 "yaffs2", 60 androidPartitionType_toString(ANDROID_PARTITION_TYPE_YAFFS2)); 61 EXPECT_STREQ( 62 "ext4", 63 androidPartitionType_toString(ANDROID_PARTITION_TYPE_EXT4)); 64 } 65 66 TEST(AndroidPartitionType, FromString) { 67 EXPECT_EQ(ANDROID_PARTITION_TYPE_YAFFS2, 68 androidPartitionType_fromString("yaffs2")); 69 EXPECT_EQ(ANDROID_PARTITION_TYPE_EXT4, 70 androidPartitionType_fromString("ext4")); 71 EXPECT_EQ(ANDROID_PARTITION_TYPE_UNKNOWN, 72 androidPartitionType_fromString("unknown")); 73 EXPECT_EQ(ANDROID_PARTITION_TYPE_UNKNOWN, 74 androidPartitionType_fromString("foobar")); 75 } 76 77 TEST(AndroidPartitionType, ProbeFileYaffs2) { 78 TempPartition part; 79 80 // An empty partition is a valid YAFFS2 one. 81 ::path_empty_file(part.GetPath()); 82 83 EXPECT_EQ(ANDROID_PARTITION_TYPE_YAFFS2, 84 androidPartitionType_probeFile(part.GetPath())); 85 } 86 87 88 TEST(AndroidPartitionType, ProbeFileExt4) { 89 TempPartition part; 90 91 android_createEmptyExt4Image(part.GetPath(), 16*1024*1024, "cache"); 92 93 EXPECT_EQ(ANDROID_PARTITION_TYPE_EXT4, 94 androidPartitionType_probeFile(part.GetPath())); 95 } 96 97 TEST(AndroidPartitionType, MakeEmptyFileYaffs2) { 98 TempPartition part; 99 100 EXPECT_EQ(0, androidPartitionType_makeEmptyFile( 101 ANDROID_PARTITION_TYPE_YAFFS2, 102 8 * 1024 * 1024, 103 part.GetPath())) << "Could not create Yaffs2 partition image"; 104 105 EXPECT_EQ(ANDROID_PARTITION_TYPE_YAFFS2, 106 androidPartitionType_probeFile(part.GetPath())); 107 } 108 109 TEST(AndroidPartitionType, MakeEmptyFileExt4) { 110 TempPartition part; 111 112 EXPECT_EQ(0, androidPartitionType_makeEmptyFile( 113 ANDROID_PARTITION_TYPE_EXT4, 114 8 * 1024 * 1024, 115 part.GetPath())) << "Could not create EXT4 partition image"; 116 117 EXPECT_EQ(ANDROID_PARTITION_TYPE_EXT4, 118 androidPartitionType_probeFile(part.GetPath())); 119 } 120