187 lines
8.6 KiB
C++
187 lines
8.6 KiB
C++
|
|
// Copyright (C) 2022 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.
|
||
|
|
|
||
|
|
#include "statsd_test_util.h"
|
||
|
|
|
||
|
|
#include "gtest_matchers.h"
|
||
|
|
#include "src/stats_log.pb.h"
|
||
|
|
|
||
|
|
namespace android {
|
||
|
|
namespace os {
|
||
|
|
namespace statsd {
|
||
|
|
|
||
|
|
#ifdef __ANDROID__
|
||
|
|
|
||
|
|
namespace {
|
||
|
|
const string appName = "app1";
|
||
|
|
const int32_t uid = 1000;
|
||
|
|
const int64_t version = 1;
|
||
|
|
const string versionString = "v1";
|
||
|
|
const string installer = "com.android.vending";
|
||
|
|
} // anonymous namespace
|
||
|
|
|
||
|
|
TEST(StatsdTestUtil_PackageInfo, TestBuildPackageInfo) {
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(appName, uid, version, versionString,
|
||
|
|
/* installer */ nullopt, /* certHash */ {},
|
||
|
|
/* deleted */ false, /* hashStrings */ false,
|
||
|
|
/* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_THAT(packageInfo.version(), Eq(version));
|
||
|
|
EXPECT_THAT(packageInfo.uid(), Eq(uid));
|
||
|
|
EXPECT_THAT(packageInfo.deleted(), Eq(false));
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set up parameterized test for testing with different values for pacakage certificate hashes.
|
||
|
|
class StatsdTestUtil_PackageInfo_CertificateHash : public TestWithParam<vector<uint8_t>> {};
|
||
|
|
INSTANTIATE_TEST_SUITE_P(
|
||
|
|
CertificateHashSizes, StatsdTestUtil_PackageInfo_CertificateHash,
|
||
|
|
Values(vector<uint8_t>(), vector<uint8_t>{'a'}, vector<uint8_t>{'a', 'b'}),
|
||
|
|
[](const TestParamInfo<StatsdTestUtil_PackageInfo_CertificateHash::ParamType>& info) {
|
||
|
|
if (info.param.empty()) {
|
||
|
|
return string("empty");
|
||
|
|
}
|
||
|
|
return string(info.param.begin(), info.param.end());
|
||
|
|
});
|
||
|
|
TEST_P(StatsdTestUtil_PackageInfo_CertificateHash, TestBuildPackageInfoCertificateHash) {
|
||
|
|
const vector<uint8_t>& certHash = GetParam();
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(appName, uid, version, versionString,
|
||
|
|
/* installer */ nullopt, certHash,
|
||
|
|
/* deleted */ false, /* hashStrings */ false,
|
||
|
|
/* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_THAT(packageInfo.has_truncated_certificate_hash(), !certHash.empty());
|
||
|
|
string expectedCertHash(certHash.begin(), certHash.end());
|
||
|
|
EXPECT_THAT(packageInfo.truncated_certificate_hash(), Eq(expectedCertHash));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(StatsdTestUtil_PackageInfo, TestBuildPackageInfoHashStrings) {
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(appName, uid, version, versionString,
|
||
|
|
/* installer */ nullopt, /* certHash */ {},
|
||
|
|
/* deleted */ false, /* hashStrings */ true,
|
||
|
|
/* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_TRUE(packageInfo.has_name_hash());
|
||
|
|
EXPECT_THAT(packageInfo.name_hash(), Eq(Hash64(appName)));
|
||
|
|
EXPECT_FALSE(packageInfo.has_name());
|
||
|
|
|
||
|
|
EXPECT_TRUE(packageInfo.has_version_string_hash());
|
||
|
|
EXPECT_THAT(packageInfo.version_string_hash(), Eq(Hash64(versionString)));
|
||
|
|
EXPECT_FALSE(packageInfo.has_version_string());
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(StatsdTestUtil_PackageInfo, TestBuildPackageInfoNoHashStrings) {
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(appName, uid, version, versionString,
|
||
|
|
/* installer */ nullopt, /* certHash */ {},
|
||
|
|
/* deleted */ false, /* hashStrings */ false,
|
||
|
|
/* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_TRUE(packageInfo.has_name());
|
||
|
|
EXPECT_THAT(packageInfo.name(), Eq(appName));
|
||
|
|
EXPECT_FALSE(packageInfo.has_name_hash());
|
||
|
|
|
||
|
|
EXPECT_TRUE(packageInfo.has_version_string());
|
||
|
|
EXPECT_THAT(packageInfo.version_string(), Eq(versionString));
|
||
|
|
EXPECT_FALSE(packageInfo.has_version_string_hash());
|
||
|
|
}
|
||
|
|
|
||
|
|
// Test with multiple permutations of installerIndex(uint32_t) and hashString(bool) tuples.
|
||
|
|
class StatsdTestUtil_PackageInfo_InstallerIndexAndHashStrings
|
||
|
|
: public TestWithParam<tuple<optional<uint32_t>, bool>> {};
|
||
|
|
INSTANTIATE_TEST_SUITE_P(InstallerIndexAndHashStrings,
|
||
|
|
StatsdTestUtil_PackageInfo_InstallerIndexAndHashStrings,
|
||
|
|
Combine(Values(optional(2), nullopt), Bool()));
|
||
|
|
TEST_P(StatsdTestUtil_PackageInfo_InstallerIndexAndHashStrings, TestBuildPackageInfoNoInstaller) {
|
||
|
|
const auto& [installerIndex, hashStrings] = GetParam();
|
||
|
|
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(appName, uid, version, versionString,
|
||
|
|
/* installer */ nullopt, /* certHash */ {},
|
||
|
|
/* deleted */ false, hashStrings, installerIndex);
|
||
|
|
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer_index());
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer_hash());
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer());
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set up parameterized test for testing with different boolean values for hashStrings parameter
|
||
|
|
// in buildPackageInfo()/buildPackageInfos()
|
||
|
|
class StatsdTestUtil_PackageInfo_HashStrings : public TestWithParam<bool> {};
|
||
|
|
INSTANTIATE_TEST_SUITE_P(HashStrings, StatsdTestUtil_PackageInfo_HashStrings, Bool(),
|
||
|
|
PrintToStringParamName());
|
||
|
|
TEST_P(StatsdTestUtil_PackageInfo_HashStrings, TestBuildPackageInfoWithInstallerAndInstallerIndex) {
|
||
|
|
const bool hashStrings = GetParam();
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(appName, uid, version, versionString, installer,
|
||
|
|
/* certHash */ {}, /* deleted */ false, hashStrings,
|
||
|
|
/* installerIndex */ 1);
|
||
|
|
|
||
|
|
EXPECT_THAT(packageInfo.installer_index(), Eq(1));
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer_hash());
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer());
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(StatsdTestUtil_PackageInfo, TestBuildPackageInfoWithInstallerNoInstallerIndexHashStrings) {
|
||
|
|
PackageInfo packageInfo =
|
||
|
|
buildPackageInfo(appName, uid, version, versionString, installer, /* certHash */ {},
|
||
|
|
/* deleted */ false, /* hashStrings */ true,
|
||
|
|
/* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer_index());
|
||
|
|
EXPECT_THAT(packageInfo.installer_hash(), Eq(Hash64(installer)));
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer());
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST(StatsdTestUtil_PackageInfo, TestBuildPackageInfoWithInstallerNoInstallerIndexNoHashStrings) {
|
||
|
|
PackageInfo packageInfo =
|
||
|
|
buildPackageInfo(appName, uid, version, versionString, installer, /* certHash */ {},
|
||
|
|
/* deleted */ false, /* hashStrings */ false,
|
||
|
|
/* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer_index());
|
||
|
|
EXPECT_THAT(packageInfo.installer(), Eq(installer));
|
||
|
|
EXPECT_FALSE(packageInfo.has_installer_hash());
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST_P(StatsdTestUtil_PackageInfo_HashStrings, TestBuildPackageInfosEmptyOptionalParams) {
|
||
|
|
const bool hashStrings = GetParam();
|
||
|
|
vector<PackageInfo> packageInfos = buildPackageInfos(
|
||
|
|
{appName}, {uid}, {version}, {versionString}, /* installers */ {}, /* certHashes */ {},
|
||
|
|
/* deleted */ {false}, /* installerIndices */ {}, hashStrings);
|
||
|
|
|
||
|
|
PackageInfo packageInfo = buildPackageInfo(
|
||
|
|
appName, uid, version, versionString, /* installer */ nullopt, /* certHash */ {},
|
||
|
|
/* deleted */ false, hashStrings, /* installerIndex */ nullopt);
|
||
|
|
|
||
|
|
EXPECT_THAT(packageInfos, Pointwise(EqPackageInfo(), {packageInfo}));
|
||
|
|
}
|
||
|
|
|
||
|
|
TEST_P(StatsdTestUtil_PackageInfo_HashStrings, TestBuildPackageInfosNonEmptyOptionalParams) {
|
||
|
|
const bool hashStrings = GetParam();
|
||
|
|
vector<PackageInfo> packageInfos = buildPackageInfos(
|
||
|
|
{appName}, {uid}, {version}, {versionString}, {installer}, /* certHashes */ {{'a'}},
|
||
|
|
/* deleted */ {false}, /* installerIndices */ {3}, hashStrings);
|
||
|
|
|
||
|
|
PackageInfo packageInfo =
|
||
|
|
buildPackageInfo(appName, uid, version, versionString, installer, /* certHash */ {'a'},
|
||
|
|
/* deleted */ false, hashStrings, /* installerIndex */ 3);
|
||
|
|
|
||
|
|
EXPECT_THAT(packageInfos, Pointwise(EqPackageInfo(), {packageInfo}));
|
||
|
|
}
|
||
|
|
|
||
|
|
#else
|
||
|
|
GTEST_LOG_(INFO) << "This test does nothing.\n";
|
||
|
|
#endif
|
||
|
|
|
||
|
|
} // namespace statsd
|
||
|
|
} // namespace os
|
||
|
|
} // namespace android
|