summaryrefslogtreecommitdiffstats
path: root/libs/androidfw/tests/BackupData_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/androidfw/tests/BackupData_test.cpp')
-rw-r--r--libs/androidfw/tests/BackupData_test.cpp438
1 files changed, 0 insertions, 438 deletions
diff --git a/libs/androidfw/tests/BackupData_test.cpp b/libs/androidfw/tests/BackupData_test.cpp
deleted file mode 100644
index 17f91ca..0000000
--- a/libs/androidfw/tests/BackupData_test.cpp
+++ /dev/null
@@ -1,438 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "ObbFile_test"
-#include <androidfw/BackupHelpers.h>
-#include <utils/Log.h>
-#include <utils/String8.h>
-
-#include <gtest/gtest.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <string.h>
-
-namespace android {
-
-#define TEST_FILENAME "/test.bd"
-
-// keys of different lengths to test padding
-#define KEY1 "key1"
-#define KEY2 "key2a"
-#define KEY3 "key3bc"
-#define KEY4 "key4def"
-
-// payloads of different lengths to test padding
-#define DATA1 "abcdefg"
-#define DATA2 "hijklmnopq"
-#define DATA3 "rstuvwxyz"
-// KEY4 is only ever deleted
-
-class BackupDataTest : public testing::Test {
-protected:
- char* m_external_storage;
- char* m_filename;
- String8 mKey1;
- String8 mKey2;
- String8 mKey3;
- String8 mKey4;
-
- virtual void SetUp() {
- m_external_storage = getenv("EXTERNAL_STORAGE");
-
- const int totalLen = strlen(m_external_storage) + strlen(TEST_FILENAME) + 1;
- m_filename = new char[totalLen];
- snprintf(m_filename, totalLen, "%s%s", m_external_storage, TEST_FILENAME);
-
- ::unlink(m_filename);
- int fd = ::open(m_filename, O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
- if (fd < 0) {
- FAIL() << "Couldn't create " << m_filename << " for writing";
- }
- mKey1 = String8(KEY1);
- mKey2 = String8(KEY2);
- mKey3 = String8(KEY3);
- mKey4 = String8(KEY4);
- }
-
- virtual void TearDown() {
- }
-};
-
-TEST_F(BackupDataTest, WriteAndReadSingle) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
-
- EXPECT_EQ(NO_ERROR, writer->WriteEntityHeader(mKey1, sizeof(DATA1)))
- << "WriteEntityHeader returned an error";
- EXPECT_EQ(NO_ERROR, writer->WriteEntityData(DATA1, sizeof(DATA1)))
- << "WriteEntityData returned an error";
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
- EXPECT_EQ(NO_ERROR, reader->Status())
- << "Reader ctor failed";
-
- bool done;
- int type;
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader";
-
- String8 key;
- size_t dataSize;
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error";
- EXPECT_EQ(mKey1, key)
- << "wrong key from ReadEntityHeader";
- EXPECT_EQ(sizeof(DATA1), dataSize)
- << "wrong size from ReadEntityHeader";
-
- char* dataBytes = new char[dataSize];
- EXPECT_EQ((int) dataSize, reader->ReadEntityData(dataBytes, dataSize))
- << "ReadEntityData returned an error";
- for (unsigned int i = 0; i < sizeof(DATA1); i++) {
- EXPECT_EQ(DATA1[i], dataBytes[i])
- << "data character " << i << " should be equal";
- }
- delete dataBytes;
- delete writer;
- delete reader;
-}
-
-TEST_F(BackupDataTest, WriteAndReadMultiple) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
- writer->WriteEntityHeader(mKey1, sizeof(DATA1));
- writer->WriteEntityData(DATA1, sizeof(DATA1));
- writer->WriteEntityHeader(mKey2, sizeof(DATA2));
- writer->WriteEntityData(DATA2, sizeof(DATA2));
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
-
- bool done;
- int type;
- String8 key;
- size_t dataSize;
- char* dataBytes;
- // read first entity
- reader->ReadNextHeader(&done, &type);
- reader->ReadEntityHeader(&key, &dataSize);
- dataBytes = new char[dataSize];
- reader->ReadEntityData(dataBytes, dataSize);
- delete dataBytes;
-
- // read and verify second entity
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on second entity";
- EXPECT_EQ(mKey2, key)
- << "wrong key from ReadEntityHeader on second entity";
- EXPECT_EQ(sizeof(DATA2), dataSize)
- << "wrong size from ReadEntityHeader on second entity";
-
- dataBytes = new char[dataSize];
- EXPECT_EQ((int)dataSize, reader->ReadEntityData(dataBytes, dataSize))
- << "ReadEntityData returned an error on second entity";
- for (unsigned int i = 0; i < sizeof(DATA2); i++) {
- EXPECT_EQ(DATA2[i], dataBytes[i])
- << "data character " << i << " should be equal";
- }
- delete dataBytes;
- delete writer;
- delete reader;
-}
-
-TEST_F(BackupDataTest, SkipEntity) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
- writer->WriteEntityHeader(mKey1, sizeof(DATA1));
- writer->WriteEntityData(DATA1, sizeof(DATA1));
- writer->WriteEntityHeader(mKey2, sizeof(DATA2));
- writer->WriteEntityData(DATA2, sizeof(DATA2));
- writer->WriteEntityHeader(mKey3, sizeof(DATA3));
- writer->WriteEntityData(DATA3, sizeof(DATA3));
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
-
- bool done;
- int type;
- String8 key;
- size_t dataSize;
- char* dataBytes;
- // read first entity
- reader->ReadNextHeader(&done, &type);
- reader->ReadEntityHeader(&key, &dataSize);
- dataBytes = new char[dataSize];
- reader->ReadEntityData(dataBytes, dataSize);
- delete dataBytes;
-
- // skip second entity
- reader->ReadNextHeader(&done, &type);
- reader->ReadEntityHeader(&key, &dataSize);
- reader->SkipEntityData();
-
- // read and verify third entity
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader after skip";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on third entity";
- EXPECT_EQ(mKey3, key)
- << "wrong key from ReadEntityHeader on third entity";
- EXPECT_EQ(sizeof(DATA3), dataSize)
- << "wrong size from ReadEntityHeader on third entity";
-
- dataBytes = new char[dataSize];
- EXPECT_EQ((int) dataSize, reader->ReadEntityData(dataBytes, dataSize))
- << "ReadEntityData returned an error on third entity";
- for (unsigned int i = 0; i < sizeof(DATA3); i++) {
- EXPECT_EQ(DATA3[i], dataBytes[i])
- << "data character " << i << " should be equal";
- }
- delete dataBytes;
- delete writer;
- delete reader;
-}
-
-TEST_F(BackupDataTest, DeleteEntity) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
- writer->WriteEntityHeader(mKey1, sizeof(DATA1));
- writer->WriteEntityData(DATA1, sizeof(DATA1));
- writer->WriteEntityHeader(mKey2, -1);
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
-
- bool done;
- int type;
- String8 key;
- size_t dataSize;
- char* dataBytes;
- // read first entity
- reader->ReadNextHeader(&done, &type);
- reader->ReadEntityHeader(&key, &dataSize);
- dataBytes = new char[dataSize];
- reader->ReadEntityData(dataBytes, dataSize);
- delete dataBytes;
-
- // read and verify deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader on deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on second entity";
- EXPECT_EQ(mKey2, key)
- << "wrong key from ReadEntityHeader on second entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on second entity";
-
- delete writer;
- delete reader;
-}
-
-TEST_F(BackupDataTest, EneityAfterDelete) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
- writer->WriteEntityHeader(mKey1, sizeof(DATA1));
- writer->WriteEntityData(DATA1, sizeof(DATA1));
- writer->WriteEntityHeader(mKey2, -1);
- writer->WriteEntityHeader(mKey3, sizeof(DATA3));
- writer->WriteEntityData(DATA3, sizeof(DATA3));
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
-
- bool done;
- int type;
- String8 key;
- size_t dataSize;
- char* dataBytes;
- // read first entity
- reader->ReadNextHeader(&done, &type);
- reader->ReadEntityHeader(&key, &dataSize);
- dataBytes = new char[dataSize];
- reader->ReadEntityData(dataBytes, dataSize);
- delete dataBytes;
-
- // read and verify deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader on deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on second entity";
- EXPECT_EQ(mKey2, key)
- << "wrong key from ReadEntityHeader on second entity";
- EXPECT_EQ(-1, (int)dataSize)
- << "not recognizing deletion on second entity";
-
- // read and verify third entity
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader after deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on third entity";
- EXPECT_EQ(mKey3, key)
- << "wrong key from ReadEntityHeader on third entity";
- EXPECT_EQ(sizeof(DATA3), dataSize)
- << "wrong size from ReadEntityHeader on third entity";
-
- dataBytes = new char[dataSize];
- EXPECT_EQ((int) dataSize, reader->ReadEntityData(dataBytes, dataSize))
- << "ReadEntityData returned an error on third entity";
- for (unsigned int i = 0; i < sizeof(DATA3); i++) {
- EXPECT_EQ(DATA3[i], dataBytes[i])
- << "data character " << i << " should be equal";
- }
- delete dataBytes;
- delete writer;
- delete reader;
-}
-
-TEST_F(BackupDataTest, OnlyDeleteEntities) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
- writer->WriteEntityHeader(mKey1, -1);
- writer->WriteEntityHeader(mKey2, -1);
- writer->WriteEntityHeader(mKey3, -1);
- writer->WriteEntityHeader(mKey4, -1);
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
-
- bool done;
- int type;
- String8 key;
- size_t dataSize;
- // read and verify first deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader first deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on first entity";
- EXPECT_EQ(mKey1, key)
- << "wrong key from ReadEntityHeader on first entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on first entity";
-
- // read and verify second deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader second deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on second entity";
- EXPECT_EQ(mKey2, key)
- << "wrong key from ReadEntityHeader on second entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on second entity";
-
- // read and verify third deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader third deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on third entity";
- EXPECT_EQ(mKey3, key)
- << "wrong key from ReadEntityHeader on third entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on third entity";
-
- // read and verify fourth deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader fourth deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on fourth entity";
- EXPECT_EQ(mKey4, key)
- << "wrong key from ReadEntityHeader on fourth entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on fourth entity";
-
- delete writer;
- delete reader;
-}
-
-TEST_F(BackupDataTest, ReadDeletedEntityData) {
- int fd = ::open(m_filename, O_WRONLY);
- BackupDataWriter* writer = new BackupDataWriter(fd);
- writer->WriteEntityHeader(mKey1, -1);
- writer->WriteEntityHeader(mKey2, -1);
-
- ::close(fd);
- fd = ::open(m_filename, O_RDONLY);
- BackupDataReader* reader = new BackupDataReader(fd);
-
- bool done;
- int type;
- String8 key;
- size_t dataSize;
- // read and verify first deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader first deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on first entity";
- EXPECT_EQ(mKey1, key)
- << "wrong key from ReadEntityHeader on first entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on first entity";
-
- // erroneously try to read first entity data
- char* dataBytes = new char[10];
- dataBytes[0] = 'A';
- EXPECT_EQ(NO_ERROR, reader->ReadEntityData(dataBytes, dataSize));
- // expect dataBytes to be unmodofied
- EXPECT_EQ('A', dataBytes[0]);
-
- // read and verify second deletion
- reader->ReadNextHeader(&done, &type);
- EXPECT_EQ(BACKUP_HEADER_ENTITY_V1, type)
- << "wrong type from ReadNextHeader second deletion";
-
- EXPECT_EQ(NO_ERROR, reader->ReadEntityHeader(&key, &dataSize))
- << "ReadEntityHeader returned an error on second entity";
- EXPECT_EQ(mKey2, key)
- << "wrong key from ReadEntityHeader on second entity";
- EXPECT_EQ(-1, (int) dataSize)
- << "not recognizing deletion on second entity";
-
- delete writer;
- delete reader;
-}
-
-}