116c4d154dca43c662571129af31b27433b919a32Adam Lesinski/* 216c4d154dca43c662571129af31b27433b919a32Adam Lesinski * Copyright (C) 2010 The Android Open Source Project 316c4d154dca43c662571129af31b27433b919a32Adam Lesinski * 416c4d154dca43c662571129af31b27433b919a32Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 516c4d154dca43c662571129af31b27433b919a32Adam Lesinski * you may not use this file except in compliance with the License. 616c4d154dca43c662571129af31b27433b919a32Adam Lesinski * You may obtain a copy of the License at 716c4d154dca43c662571129af31b27433b919a32Adam Lesinski * 816c4d154dca43c662571129af31b27433b919a32Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 916c4d154dca43c662571129af31b27433b919a32Adam Lesinski * 1016c4d154dca43c662571129af31b27433b919a32Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1116c4d154dca43c662571129af31b27433b919a32Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1216c4d154dca43c662571129af31b27433b919a32Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1316c4d154dca43c662571129af31b27433b919a32Adam Lesinski * See the License for the specific language governing permissions and 1416c4d154dca43c662571129af31b27433b919a32Adam Lesinski * limitations under the License. 1516c4d154dca43c662571129af31b27433b919a32Adam Lesinski */ 1616c4d154dca43c662571129af31b27433b919a32Adam Lesinski 1716c4d154dca43c662571129af31b27433b919a32Adam Lesinski#define LOG_TAG "ObbFile_test" 1816c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <androidfw/ObbFile.h> 1916c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <utils/Log.h> 2016c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <utils/RefBase.h> 2116c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <utils/String8.h> 2216c4d154dca43c662571129af31b27433b919a32Adam Lesinski 2316c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <gtest/gtest.h> 2416c4d154dca43c662571129af31b27433b919a32Adam Lesinski 2516c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <sys/types.h> 2616c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <sys/stat.h> 2716c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <fcntl.h> 2816c4d154dca43c662571129af31b27433b919a32Adam Lesinski#include <string.h> 2916c4d154dca43c662571129af31b27433b919a32Adam Lesinski 3016c4d154dca43c662571129af31b27433b919a32Adam Lesinskinamespace android { 3116c4d154dca43c662571129af31b27433b919a32Adam Lesinski 3216c4d154dca43c662571129af31b27433b919a32Adam Lesinski#define TEST_FILENAME "/test.obb" 3316c4d154dca43c662571129af31b27433b919a32Adam Lesinski 3416c4d154dca43c662571129af31b27433b919a32Adam Lesinskiclass ObbFileTest : public testing::Test { 3516c4d154dca43c662571129af31b27433b919a32Adam Lesinskiprotected: 3616c4d154dca43c662571129af31b27433b919a32Adam Lesinski sp<ObbFile> mObbFile; 37d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski String8 mFileName; 3816c4d154dca43c662571129af31b27433b919a32Adam Lesinski 3916c4d154dca43c662571129af31b27433b919a32Adam Lesinski virtual void SetUp() { 4016c4d154dca43c662571129af31b27433b919a32Adam Lesinski mObbFile = new ObbFile(); 41d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski char* externalStorage = getenv("EXTERNAL_STORAGE"); 4216c4d154dca43c662571129af31b27433b919a32Adam Lesinski 43d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski mFileName.append(externalStorage); 44d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski mFileName.append(TEST_FILENAME); 4516c4d154dca43c662571129af31b27433b919a32Adam Lesinski 46d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski int fd = ::open(mFileName.string(), O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); 4716c4d154dca43c662571129af31b27433b919a32Adam Lesinski if (fd < 0) { 48d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski FAIL() << "Couldn't create " << mFileName.string() << " for tests"; 4916c4d154dca43c662571129af31b27433b919a32Adam Lesinski } 5016c4d154dca43c662571129af31b27433b919a32Adam Lesinski } 5116c4d154dca43c662571129af31b27433b919a32Adam Lesinski 5216c4d154dca43c662571129af31b27433b919a32Adam Lesinski virtual void TearDown() { 5316c4d154dca43c662571129af31b27433b919a32Adam Lesinski } 5416c4d154dca43c662571129af31b27433b919a32Adam Lesinski}; 5516c4d154dca43c662571129af31b27433b919a32Adam Lesinski 5616c4d154dca43c662571129af31b27433b919a32Adam LesinskiTEST_F(ObbFileTest, ReadFailure) { 5716c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_FALSE(mObbFile->readFrom(-1)) 5816c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "No failure on invalid file descriptor"; 5916c4d154dca43c662571129af31b27433b919a32Adam Lesinski} 6016c4d154dca43c662571129af31b27433b919a32Adam Lesinski 6116c4d154dca43c662571129af31b27433b919a32Adam LesinskiTEST_F(ObbFileTest, WriteThenRead) { 6216c4d154dca43c662571129af31b27433b919a32Adam Lesinski const char* packageName = "com.example.obbfile"; 6316c4d154dca43c662571129af31b27433b919a32Adam Lesinski const int32_t versionNum = 1; 6416c4d154dca43c662571129af31b27433b919a32Adam Lesinski 6516c4d154dca43c662571129af31b27433b919a32Adam Lesinski mObbFile->setPackageName(String8(packageName)); 6616c4d154dca43c662571129af31b27433b919a32Adam Lesinski mObbFile->setVersion(versionNum); 6716c4d154dca43c662571129af31b27433b919a32Adam Lesinski#define SALT_SIZE 8 6816c4d154dca43c662571129af31b27433b919a32Adam Lesinski unsigned char salt[SALT_SIZE] = {0x01, 0x10, 0x55, 0xAA, 0xFF, 0x00, 0x5A, 0xA5}; 6916c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_TRUE(mObbFile->setSalt(salt, SALT_SIZE)) 7016c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "Salt should be successfully set"; 7116c4d154dca43c662571129af31b27433b919a32Adam Lesinski 72d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski EXPECT_TRUE(mObbFile->writeTo(mFileName.string())) 7316c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "couldn't write to fake .obb file"; 7416c4d154dca43c662571129af31b27433b919a32Adam Lesinski 7516c4d154dca43c662571129af31b27433b919a32Adam Lesinski mObbFile = new ObbFile(); 7616c4d154dca43c662571129af31b27433b919a32Adam Lesinski 77d79e33379d56e20b7dd67baa992409b72a335dedAdam Lesinski EXPECT_TRUE(mObbFile->readFrom(mFileName.string())) 7816c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "couldn't read from fake .obb file"; 7916c4d154dca43c662571129af31b27433b919a32Adam Lesinski 8016c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_EQ(versionNum, mObbFile->getVersion()) 8116c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "version didn't come out the same as it went in"; 8216c4d154dca43c662571129af31b27433b919a32Adam Lesinski const char* currentPackageName = mObbFile->getPackageName().string(); 8316c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_STREQ(packageName, currentPackageName) 8416c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "package name didn't come out the same as it went in"; 8516c4d154dca43c662571129af31b27433b919a32Adam Lesinski 8616c4d154dca43c662571129af31b27433b919a32Adam Lesinski size_t saltLen; 8716c4d154dca43c662571129af31b27433b919a32Adam Lesinski const unsigned char* newSalt = mObbFile->getSalt(&saltLen); 8816c4d154dca43c662571129af31b27433b919a32Adam Lesinski 8916c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_EQ(sizeof(salt), saltLen) 9016c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "salt sizes were not the same"; 9116c4d154dca43c662571129af31b27433b919a32Adam Lesinski 92de898ff42912bd7ca1bfb099cd439562496765a4Adam Lesinski for (size_t i = 0; i < sizeof(salt); i++) { 9316c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_EQ(salt[i], newSalt[i]) 9416c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "salt character " << i << " should be equal"; 9516c4d154dca43c662571129af31b27433b919a32Adam Lesinski } 9616c4d154dca43c662571129af31b27433b919a32Adam Lesinski EXPECT_TRUE(memcmp(newSalt, salt, sizeof(salt)) == 0) 9716c4d154dca43c662571129af31b27433b919a32Adam Lesinski << "salts should be the same"; 9816c4d154dca43c662571129af31b27433b919a32Adam Lesinski} 9916c4d154dca43c662571129af31b27433b919a32Adam Lesinski 10016c4d154dca43c662571129af31b27433b919a32Adam Lesinski} 101