194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood/* 294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * Copyright (C) 2011 The Android Open Source Project 394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * 494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * Licensed under the Apache License, Version 2.0 (the "License"); 594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * you may not use this file except in compliance with the License. 694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * You may obtain a copy of the License at 794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * 894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * http://www.apache.org/licenses/LICENSE-2.0 994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * 1094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * Unless required by applicable law or agreed to in writing, software 1194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * distributed under the License is distributed on an "AS IS" BASIS, 1294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * See the License for the specific language governing permissions and 1494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood * limitations under the License. 1594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood */ 1694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 1794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <stdlib.h> 1894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <string.h> 1994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 2094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#include <gtest/gtest.h> 2194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 2202d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe#include <commands.h> 2302d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe#include <globals.h> 2402d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe#include <utils.h> 2519803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey 2619803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey#undef LOG_TAG 2719803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey#define LOG_TAG "utils_test" 2894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 2994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define TEST_DATA_DIR "/data/" 3094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define TEST_APP_DIR "/data/app/" 3194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define TEST_APP_PRIVATE_DIR "/data/app-private/" 3294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define TEST_ASEC_DIR "/mnt/asec/" 3319803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey#define TEST_EXPAND_DIR "/mnt/expand/" 3494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 3594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define TEST_SYSTEM_DIR1 "/system/app/" 3694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define TEST_SYSTEM_DIR2 "/vendor/app/" 3794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 3894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define REALLY_LONG_APP_NAME "com.example." \ 3994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa." \ 4094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa." \ 4194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 4294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 4394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood#define REALLY_LONG_LEAF_NAME "shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_" \ 4494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood "shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_" \ 4594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood "shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_" \ 4694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood "shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_shared_prefs_" 4794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 4894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwoodnamespace android { 4902d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampenamespace installd { 5094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 5194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwoodclass UtilsTest : public testing::Test { 5294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwoodprotected: 5394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood virtual void SetUp() { 5419803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_app_dir.path = (char*) TEST_APP_DIR; 5594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_app_dir.len = strlen(TEST_APP_DIR); 5694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 5719803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_app_private_dir.path = (char*) TEST_APP_PRIVATE_DIR; 5894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_app_private_dir.len = strlen(TEST_APP_PRIVATE_DIR); 5994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 6019803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_data_dir.path = (char*) TEST_DATA_DIR; 6194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_data_dir.len = strlen(TEST_DATA_DIR); 6294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 6319803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_asec_dir.path = (char*) TEST_ASEC_DIR; 6494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_asec_dir.len = strlen(TEST_ASEC_DIR); 6594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 6619803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_mnt_expand_dir.path = (char*) TEST_EXPAND_DIR; 6719803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_mnt_expand_dir.len = strlen(TEST_EXPAND_DIR); 6819803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey 6994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_system_dirs.count = 2; 7094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 7194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_system_dirs.dirs = (dir_rec_t*) calloc(android_system_dirs.count, sizeof(dir_rec_t)); 7219803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_system_dirs.dirs[0].path = (char*) TEST_SYSTEM_DIR1; 7394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_system_dirs.dirs[0].len = strlen(TEST_SYSTEM_DIR1); 7494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 7519803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey android_system_dirs.dirs[1].path = (char*) TEST_SYSTEM_DIR2; 7694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood android_system_dirs.dirs[1].len = strlen(TEST_SYSTEM_DIR2); 7794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood } 7894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 7994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood virtual void TearDown() { 8094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood free(android_system_dirs.dirs); 8194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood } 8294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood}; 8394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 8494afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_BadPrefix) { 8594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood // Bad prefixes directories 8694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badprefix1 = "/etc/passwd"; 8794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badprefix1)) 8894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badprefix1 << " should be allowed as a valid path"; 8994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 9094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badprefix2 = "../.." TEST_APP_DIR "../../../blah"; 9194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badprefix2)) 9294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badprefix2 << " should be allowed as a valid path"; 9394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 9494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badprefix3 = "init.rc"; 9594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badprefix3)) 9694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badprefix3 << " should be allowed as a valid path"; 9794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 9894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badprefix4 = "/init.rc"; 9994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badprefix4)) 10094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badprefix4 << " should be allowed as a valid path"; 10194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 10294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 10394afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_Internal) { 10494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood // Internal directories 10594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *internal1 = TEST_APP_DIR "example.apk"; 10694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, validate_apk_path(internal1)) 10794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << internal1 << " should be allowed as a valid path"; 10894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 109fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle // b/16888084 110fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle const char *path2 = TEST_APP_DIR "example.com/example.apk"; 111fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle EXPECT_EQ(0, validate_apk_path(path2)) 112fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle << path2 << " should be allowed as a valid path"; 113fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle 11494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badint1 = TEST_APP_DIR "../example.apk"; 11594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badint1)) 11694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badint1 << " should be rejected as a invalid path"; 11794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 11894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badint2 = TEST_APP_DIR "/../example.apk"; 11994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badint2)) 12094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badint2 << " should be rejected as a invalid path"; 12194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 122fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle // Only one subdir should be allowed. 123fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle const char *bad_path3 = TEST_APP_DIR "example.com/subdir/pkg.apk"; 124fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle EXPECT_EQ(-1, validate_apk_path(bad_path3)) 125fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle << bad_path3 << " should be rejected as a invalid path"; 126c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 127c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *bad_path4 = TEST_APP_DIR "example.com/subdir/../pkg.apk"; 128c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_apk_path(bad_path4)) 129c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << bad_path4 << " should be rejected as a invalid path"; 130c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 131c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *bad_path5 = TEST_APP_DIR "example.com1/../example.com2/pkg.apk"; 132c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_apk_path(bad_path5)) 133c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << bad_path5 << " should be rejected as a invalid path"; 13494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 13594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 13694afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_Private) { 13794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood // Internal directories 13894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *private1 = TEST_APP_PRIVATE_DIR "example.apk"; 13994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, validate_apk_path(private1)) 14094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << private1 << " should be allowed as a valid path"; 14194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 142fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle // b/16888084 143fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle const char *path2 = TEST_APP_DIR "example.com/example.apk"; 144fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle EXPECT_EQ(0, validate_apk_path(path2)) 145fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle << path2 << " should be allowed as a valid path"; 146fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle 14794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badpriv1 = TEST_APP_PRIVATE_DIR "../example.apk"; 14894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badpriv1)) 14994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badpriv1 << " should be rejected as a invalid path"; 15094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 15194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badpriv2 = TEST_APP_PRIVATE_DIR "/../example.apk"; 15294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badpriv2)) 15394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badpriv2 << " should be rejected as a invalid path"; 15494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 155fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle // Only one subdir should be allowed. 156fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle const char *bad_path3 = TEST_APP_PRIVATE_DIR "example.com/subdir/pkg.apk"; 157fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle EXPECT_EQ(-1, validate_apk_path(bad_path3)) 158fd88ff2edd954117e36372fb095b6f5f35aad0e3Calin Juravle << bad_path3 << " should be rejected as a invalid path"; 159c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 160c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *bad_path4 = TEST_APP_PRIVATE_DIR "example.com/subdir/../pkg.apk"; 161c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_apk_path(bad_path4)) 162c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << bad_path4 << " should be rejected as a invalid path"; 163c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 164c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *bad_path5 = TEST_APP_PRIVATE_DIR "example.com1/../example.com2/pkg.apk"; 165c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_apk_path(bad_path5)) 166c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << bad_path5 << " should be rejected as a invalid path"; 16794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 16894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 16994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 17094afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_AsecGood1) { 17194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *asec1 = TEST_ASEC_DIR "example.apk"; 17294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, validate_apk_path(asec1)) 17394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << asec1 << " should be allowed as a valid path"; 17494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 17594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 17694afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_AsecGood2) { 17794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *asec2 = TEST_ASEC_DIR "com.example.asec/pkg.apk"; 17894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, validate_apk_path(asec2)) 17994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << asec2 << " should be allowed as a valid path"; 18094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 18194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 18294afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_EscapeFail) { 18394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec1 = TEST_ASEC_DIR "../example.apk"; 18494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec1)) 18594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec1 << " should be rejected as a invalid path"; 18694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 18794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 18894afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_DoubleSlashFail) { 18994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec2 = TEST_ASEC_DIR "com.example.asec//pkg.apk"; 19094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec2)) 19194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec2 << " should be rejected as a invalid path"; 19294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 19394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 19494afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_SubdirEscapeFail) { 19594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec3 = TEST_ASEC_DIR "com.example.asec/../../../pkg.apk"; 19694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec3)) 19794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec3 << " should be rejected as a invalid path"; 19894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 19994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 20094afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_SlashEscapeFail) { 20194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec4 = TEST_ASEC_DIR "/../example.apk"; 20294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec4)) 20394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec4 << " should be rejected as a invalid path"; 20494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 20594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 20694afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_CrazyDirFail) { 20794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec5 = TEST_ASEC_DIR ".//../.."; 20894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec5)) 20994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec5 << " should be rejected as a invalid path"; 21094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 21194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 21294afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_SubdirEscapeSingleFail) { 21394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec6 = TEST_ASEC_DIR "com.example.asec/../pkg.apk"; 21494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec6)) 21594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec6 << " should be rejected as a invalid path"; 21694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 21794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 21894afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, IsValidApkPath_TwoSubdirFail) { 21994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badasec7 = TEST_ASEC_DIR "com.example.asec/subdir1/pkg.apk"; 22094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_apk_path(badasec7)) 22194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badasec7 << " should be rejected as a invalid path"; 22294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 22394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 22494afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CheckSystemApp_Dir1) { 22594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *sysapp1 = TEST_SYSTEM_DIR1 "Voice.apk"; 22694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, validate_system_app_path(sysapp1)) 22794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << sysapp1 << " should be allowed as a system path"; 22894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 22994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 23094afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CheckSystemApp_Dir2) { 23194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *sysapp2 = TEST_SYSTEM_DIR2 "com.example.myapp.apk"; 23294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, validate_system_app_path(sysapp2)) 23394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << sysapp2 << " should be allowed as a system path"; 23494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 23594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 23694afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CheckSystemApp_EscapeFail) { 23794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badapp1 = TEST_SYSTEM_DIR1 "../com.example.apk"; 23894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_system_app_path(badapp1)) 23994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badapp1 << " should be rejected not a system path"; 24094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 24194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 24294afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CheckSystemApp_DoubleEscapeFail) { 24394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badapp2 = TEST_SYSTEM_DIR2 "/../../com.example.apk"; 24494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_system_app_path(badapp2)) 24594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badapp2 << " should be rejected not a system path"; 24694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 24794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 24894afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CheckSystemApp_BadPathEscapeFail) { 24994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char *badapp3 = TEST_APP_DIR "/../../com.example.apk"; 25094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, validate_system_app_path(badapp3)) 25194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << badapp3 << " should be rejected not a system path"; 25294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 25394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 254c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin JuravleTEST_F(UtilsTest, CheckSystemApp_Subdir) { 255c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *sysapp = TEST_SYSTEM_DIR1 "com.example/com.example.apk"; 256c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(0, validate_system_app_path(sysapp)) 257c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << sysapp << " should be allowed as a system path"; 258c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 259c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *badapp = TEST_SYSTEM_DIR1 "com.example/subdir/com.example.apk"; 260c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_system_app_path(badapp)) 261c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << badapp << " should be rejected not a system path"; 262c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 263c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *badapp1 = TEST_SYSTEM_DIR1 "com.example/subdir/../com.example.apk"; 264c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_system_app_path(badapp1)) 265c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << badapp1 << " should be rejected not a system path"; 266c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 267c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle const char *badapp2 = TEST_SYSTEM_DIR1 "com.example1/../com.example2/com.example.apk"; 268c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle EXPECT_EQ(-1, validate_system_app_path(badapp2)) 269c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle << badapp2 << " should be rejected not a system path"; 270c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle} 271c597b6dd895dbb2b28c757ce7a2651b3cdc9b00cCalin Juravle 27294afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, GetPathFromString_NullPathFail) { 27394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t test1; 27494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, get_path_from_string(&test1, (const char *) NULL)) 27594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should not allow NULL as a path."; 27694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 27794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 27894afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, GetPathFromString_EmptyPathFail) { 27994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t test1; 28094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, get_path_from_string(&test1, "")) 28194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should not allow empty paths."; 28294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 28394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 28494afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, GetPathFromString_RelativePathFail) { 28594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t test1; 28694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, get_path_from_string(&test1, "mnt/asec")) 28794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should not allow relative paths."; 28894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 28994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 29094afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, GetPathFromString_NonCanonical) { 29194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t test1; 29294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 29394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, get_path_from_string(&test1, "/mnt/asec")) 29494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should be able to canonicalize directory /mnt/asec"; 29594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("/mnt/asec/", test1.path) 29694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "/mnt/asec should be canonicalized to /mnt/asec/"; 29794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(10, (ssize_t) test1.len) 29894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "path len should be equal to the length of /mnt/asec/ (10)"; 29994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood free(test1.path); 30094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 30194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 30294afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, GetPathFromString_CanonicalPath) { 30394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t test3; 30494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, get_path_from_string(&test3, "/data/app/")) 30594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should be able to canonicalize directory /data/app/"; 30694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("/data/app/", test3.path) 30794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "/data/app/ should be canonicalized to /data/app/"; 30894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(10, (ssize_t) test3.len) 30994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "path len should be equal to the length of /data/app/ (10)"; 31094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood free(test3.path); 31194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 31294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 31394afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreatePkgPath_LongPkgNameSuccess) { 31494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 31594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 31694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood // Create long packagename of "aaaaa..." 31794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood size_t pkgnameSize = PKG_NAME_MAX; 31894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char pkgname[pkgnameSize + 1]; 31994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood memset(pkgname, 'a', pkgnameSize); 32094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood pkgname[pkgnameSize] = '\0'; 32194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 32294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, create_pkg_path(path, pkgname, "", 0)) 32394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should successfully be able to create package name."; 32494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 32502d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe std::string prefix = std::string(TEST_DATA_DIR) + PRIMARY_USER_PREFIX; 32602d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe size_t offset = prefix.length(); 327c03de09173f98506e73e7cf7df21fe11795d4b24Jeff Sharkey 32894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ(pkgname, path + offset) 32994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Package path should be a really long string of a's"; 33094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 33194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 33294afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreatePkgPath_LongPkgNameFail) { 33394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 33494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 33594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood // Create long packagename of "aaaaa..." 33694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood size_t pkgnameSize = PKG_NAME_MAX + 1; 33794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char pkgname[pkgnameSize + 1]; 33894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood memset(pkgname, 'a', pkgnameSize); 33994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood pkgname[pkgnameSize] = '\0'; 34094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 34194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, create_pkg_path(path, pkgname, "", 0)) 34294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should return error because package name is too long."; 34394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 34494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 34594afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreatePkgPath_LongPostfixFail) { 34694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 34794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 34894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood // Create long packagename of "aaaaa..." 34994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood size_t postfixSize = PKG_PATH_MAX; 35094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char postfix[postfixSize + 1]; 35194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood memset(postfix, 'a', postfixSize); 35294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood postfix[postfixSize] = '\0'; 35394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 35494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, create_pkg_path(path, "com.example.package", postfix, 0)) 35594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should return error because postfix is too long."; 35694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 35794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 35894afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreatePkgPath_PrimaryUser) { 35994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 36094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 36194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, create_pkg_path(path, "com.example.package", "", 0)) 36294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should return error because postfix is too long."; 36394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 36402d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe std::string p = std::string(TEST_DATA_DIR) 36502d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe + PRIMARY_USER_PREFIX 36602d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe + "com.example.package"; 36702d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe EXPECT_STREQ(p.c_str(), path) 36894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Package path should be in /data/data/"; 36994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 37094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 37194afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreatePkgPath_SecondaryUser) { 37294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 37394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 37494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, create_pkg_path(path, "com.example.package", "", 1)) 37594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should successfully create package path."; 37694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 37702d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe std::string p = std::string(TEST_DATA_DIR) 37802d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe + SECONDARY_USER_PREFIX 37902d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe + "1/com.example.package"; 38002d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe EXPECT_STREQ(p.c_str(), path) 38194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Package path should be in /data/user/"; 38294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 38394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 38494afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreateMovePath_Primary) { 38594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 38694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 38794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, create_move_path(path, "com.android.test", "shared_prefs", 0)) 38894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should be able to create move path for primary user"; 38994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 39094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("/data/data/com.android.test/shared_prefs", path) 39194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Primary user package directory should be created correctly"; 39294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 39394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 39494afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreateMovePath_Fail_AppTooLong) { 39594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 39694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 39794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, create_move_path(path, REALLY_LONG_APP_NAME, "shared_prefs", 0)) 39894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should fail to create move path for primary user"; 39994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 40094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 40194afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CreateMovePath_Fail_LeafTooLong) { 40294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char path[PKG_PATH_MAX]; 40394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 40494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, create_move_path(path, "com.android.test", REALLY_LONG_LEAF_NAME, 0)) 40594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should fail to create move path for primary user"; 40694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 40794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 40894afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, CopyAndAppend_Normal) { 40994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood //int copy_and_append(dir_rec_t* dst, dir_rec_t* src, char* suffix) 41094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t dst; 41194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood dir_rec_t src; 41294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 41319803807cd7ae01868fcfa50305f4a7dd13765e2Jeff Sharkey src.path = (char*) "/data/"; 41494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood src.len = strlen(src.path); 41594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 41694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, copy_and_append(&dst, &src, "app/")) 41794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Should return error because postfix is too long."; 41894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 41994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("/data/app/", dst.path) 42094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Appended path should be correct"; 42194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 42294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(10, (ssize_t) dst.len) 42394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "Appended path should be length of '/data/app/' (10)"; 42494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 42594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 42694afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, AppendAndIncrement_Normal) { 42794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood size_t dst_size = 10; 42894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char dst[dst_size]; 42994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char *dstp = dst; 43094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char* src = "FOO"; 43194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 43294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, append_and_increment(&dstp, src, &dst_size)) 43394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should append successfully"; 43494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 43594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("FOO", dst) 43694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should append correctly"; 43794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 43894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, append_and_increment(&dstp, src, &dst_size)) 43994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should append successfully again"; 44094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 44194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("FOOFOO", dst) 44294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should append correctly again"; 44394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 44494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 44594afecf4b6f437b3ee9a076242402e421c6c07a6Mike LockwoodTEST_F(UtilsTest, AppendAndIncrement_TooBig) { 44694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood size_t dst_size = 5; 44794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char dst[dst_size]; 44894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood char *dstp = dst; 44994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood const char* src = "FOO"; 45094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 45194afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(0, append_and_increment(&dstp, src, &dst_size)) 45294afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should append successfully"; 45394afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 45494afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_STREQ("FOO", dst) 45594afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should append correctly"; 45694afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 45794afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood EXPECT_EQ(-1, append_and_increment(&dstp, src, &dst_size)) 45894afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood << "String should fail because it's too large to fit"; 45994afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood} 46094afecf4b6f437b3ee9a076242402e421c6c07a6Mike Lockwood 46141ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff SharkeyTEST_F(UtilsTest, CreateDataPath) { 46241ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/data", create_data_path(nullptr)); 46341ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 46441ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey create_data_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b")); 46541ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey} 46641ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey 467d792118c493806eeb24a8203f508e6e18fe93bd7Jeff SharkeyTEST_F(UtilsTest, CreateDataAppPath) { 468d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey EXPECT_EQ("/data/app", create_data_app_path(nullptr)); 469d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey 470d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/app", 471d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey create_data_app_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b")); 472d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey} 473d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey 47441ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff SharkeyTEST_F(UtilsTest, CreateDataUserPath) { 4752f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey EXPECT_EQ("/data/data", create_data_user_ce_path(nullptr, 0)); 4762f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey EXPECT_EQ("/data/user/10", create_data_user_ce_path(nullptr, 10)); 47741ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey 47841ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/user/0", 4792f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey create_data_user_ce_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 0)); 48041ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/user/10", 4812f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey create_data_user_ce_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 10)); 48241ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey} 48341ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey 48441ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff SharkeyTEST_F(UtilsTest, CreateDataMediaPath) { 48541ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/data/media/0", create_data_media_path(nullptr, 0)); 48641ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/data/media/10", create_data_media_path(nullptr, 10)); 48741ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey 48841ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/media/0", 48941ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey create_data_media_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 0)); 49041ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/media/10", 49141ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey create_data_media_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 10)); 49241ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey} 49341ea424413c0381ef2aa15fc5bd5d4b88abd23c4Jeff Sharkey 494d792118c493806eeb24a8203f508e6e18fe93bd7Jeff SharkeyTEST_F(UtilsTest, CreateDataAppPackagePath) { 495d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey EXPECT_EQ("/data/app/com.example", create_data_app_package_path(nullptr, "com.example")); 496d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey 497d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/app/com.example", 498d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey create_data_app_package_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", "com.example")); 499d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey} 500d792118c493806eeb24a8203f508e6e18fe93bd7Jeff Sharkey 501d792118c493806eeb24a8203f508e6e18fe93bd7Jeff SharkeyTEST_F(UtilsTest, CreateDataUserPackagePath) { 5022f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey EXPECT_EQ("/data/data/com.example", create_data_user_ce_package_path(nullptr, 0, "com.example")); 5032f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey EXPECT_EQ("/data/user/10/com.example", create_data_user_ce_package_path(nullptr, 10, "com.example")); 504c03de09173f98506e73e7cf7df21fe11795d4b24Jeff Sharkey 505c03de09173f98506e73e7cf7df21fe11795d4b24Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/user/0/com.example", 5062f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey create_data_user_ce_package_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 0, "com.example")); 507c03de09173f98506e73e7cf7df21fe11795d4b24Jeff Sharkey EXPECT_EQ("/mnt/expand/57f8f4bc-abf4-655f-bf67-946fc0f9f25b/user/10/com.example", 5082f720f7ec5c9d0b91defc85878e7330b10f8e89aJeff Sharkey create_data_user_ce_package_path("57f8f4bc-abf4-655f-bf67-946fc0f9f25b", 10, "com.example")); 509c03de09173f98506e73e7cf7df21fe11795d4b24Jeff Sharkey} 510c03de09173f98506e73e7cf7df21fe11795d4b24Jeff Sharkey 51102d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe} // namespace installd 51202d0de56c75347a0cb8d5a8565dc8c4ee7616057Andreas Gampe} // namespace android 513