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