Home | History | Annotate | Download | only in filesystems
      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