ObbFile_test.cpp revision 4b447b91debda9c9a0e230cab9e140e356b2a305
17cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root/* 27cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * Copyright (C) 2010 The Android Open Source Project 37cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * 47cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 57cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * you may not use this file except in compliance with the License. 67cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * You may obtain a copy of the License at 77cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * 87cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * http://www.apache.org/licenses/LICENSE-2.0 97cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * 107cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * Unless required by applicable law or agreed to in writing, software 117cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * distributed under the License is distributed on an "AS IS" BASIS, 127cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * See the License for the specific language governing permissions and 147cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root * limitations under the License. 157cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root */ 167cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 177cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root#define LOG_TAG "ObbFile_test" 18b13b9bdad2baf6ad1ec2e56b6b7598fa20f55fc4Mathias Agopian#include <androidfw/ObbFile.h> 197cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root#include <utils/Log.h> 207cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root#include <utils/RefBase.h> 217cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root#include <utils/String8.h> 227cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 237cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root#include <gtest/gtest.h> 247cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 254b447b91debda9c9a0e230cab9e140e356b2a305Nick Kralevich#include <sys/types.h> 264b447b91debda9c9a0e230cab9e140e356b2a305Nick Kralevich#include <sys/stat.h> 2787315aa1f0b64efcef416628215be89851cc4736Kenny Root#include <fcntl.h> 283b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root#include <string.h> 2987315aa1f0b64efcef416628215be89851cc4736Kenny Root 307cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Rootnamespace android { 317cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 327cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root#define TEST_FILENAME "/test.obb" 337cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 347cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Rootclass ObbFileTest : public testing::Test { 357cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Rootprotected: 367cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root sp<ObbFile> mObbFile; 377cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root char* mExternalStorage; 387cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root char* mFileName; 397cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 407cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root virtual void SetUp() { 417cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root mObbFile = new ObbFile(); 427cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root mExternalStorage = getenv("EXTERNAL_STORAGE"); 437cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 447cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root const int totalLen = strlen(mExternalStorage) + strlen(TEST_FILENAME) + 1; 457cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root mFileName = new char[totalLen]; 467cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root snprintf(mFileName, totalLen, "%s%s", mExternalStorage, TEST_FILENAME); 4787315aa1f0b64efcef416628215be89851cc4736Kenny Root 484b447b91debda9c9a0e230cab9e140e356b2a305Nick Kralevich int fd = ::open(mFileName, O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR); 4987315aa1f0b64efcef416628215be89851cc4736Kenny Root if (fd < 0) { 5087315aa1f0b64efcef416628215be89851cc4736Kenny Root FAIL() << "Couldn't create " << mFileName << " for tests"; 5187315aa1f0b64efcef416628215be89851cc4736Kenny Root } 527cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root } 537cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 547cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root virtual void TearDown() { 557cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root } 567cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root}; 577cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 587cee34a051eb0087322c8b965e498f88b1aa52d3Kenny RootTEST_F(ObbFileTest, ReadFailure) { 5987315aa1f0b64efcef416628215be89851cc4736Kenny Root EXPECT_FALSE(mObbFile->readFrom(-1)) 6087315aa1f0b64efcef416628215be89851cc4736Kenny Root << "No failure on invalid file descriptor"; 617cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root} 627cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 637cee34a051eb0087322c8b965e498f88b1aa52d3Kenny RootTEST_F(ObbFileTest, WriteThenRead) { 647cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root const char* packageName = "com.example.obbfile"; 657cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root const int32_t versionNum = 1; 667cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 677cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root mObbFile->setPackageName(String8(packageName)); 687cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root mObbFile->setVersion(versionNum); 693b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root#define SALT_SIZE 8 703b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root unsigned char salt[SALT_SIZE] = {0x01, 0x10, 0x55, 0xAA, 0xFF, 0x00, 0x5A, 0xA5}; 713b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root EXPECT_TRUE(mObbFile->setSalt(salt, SALT_SIZE)) 723b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root << "Salt should be successfully set"; 737cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 747cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root EXPECT_TRUE(mObbFile->writeTo(mFileName)) 757cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root << "couldn't write to fake .obb file"; 767cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 777cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root mObbFile = new ObbFile(); 787cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 797cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root EXPECT_TRUE(mObbFile->readFrom(mFileName)) 807cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root << "couldn't read from fake .obb file"; 817cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 827cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root EXPECT_EQ(versionNum, mObbFile->getVersion()) 8387315aa1f0b64efcef416628215be89851cc4736Kenny Root << "version didn't come out the same as it went in"; 847cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root const char* currentPackageName = mObbFile->getPackageName().string(); 857cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root EXPECT_STREQ(packageName, currentPackageName) 8687315aa1f0b64efcef416628215be89851cc4736Kenny Root << "package name didn't come out the same as it went in"; 873b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root 883b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root size_t saltLen; 893b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root const unsigned char* newSalt = mObbFile->getSalt(&saltLen); 903b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root 913b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root EXPECT_EQ(sizeof(salt), saltLen) 923b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root << "salt sizes were not the same"; 933b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root 943b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root for (int i = 0; i < sizeof(salt); i++) { 953b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root EXPECT_EQ(salt[i], newSalt[i]) 963b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root << "salt character " << i << " should be equal"; 973b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root } 983b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root EXPECT_TRUE(memcmp(newSalt, salt, sizeof(salt)) == 0) 993b1abba6bbc895d63da3e82e9b158c01bd12edddKenny Root << "salts should be the same"; 1007cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root} 1017cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root 1027cee34a051eb0087322c8b965e498f88b1aa52d3Kenny Root} 103