1 /*
2 * Copyright (C) 2021 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17 #include "app_info.h"
18
19 #include <vector>
20
21 #include "gtest/gtest.h"
22
23 namespace art {
24
TEST(AppInfoTest,RegisterAppInfo)25 TEST(AppInfoTest, RegisterAppInfo) {
26 AppInfo app_info;
27 app_info.RegisterAppInfo(
28 "package_name",
29 std::vector<std::string>({"code_location"}),
30 "",
31 "",
32 AppInfo::CodeType::kPrimaryApk);
33
34 std::string filter;
35 std::string reason;
36 app_info.GetPrimaryApkOptimizationStatus(&filter, &reason);
37
38 // Odex status was not registered.
39 ASSERT_EQ(filter, "unknown");
40 ASSERT_EQ(reason, "unknown");
41 }
42
TEST(AppInfoTest,RegisterAppInfoWithOdexStatus)43 TEST(AppInfoTest, RegisterAppInfoWithOdexStatus) {
44 AppInfo app_info;
45 app_info.RegisterAppInfo(
46 "package_name",
47 std::vector<std::string>({"code_location"}),
48 "",
49 "",
50 AppInfo::CodeType::kPrimaryApk);
51 app_info.RegisterOdexStatus(
52 "code_location",
53 "filter",
54 "reason",
55 "odex_status");
56
57 std::string filter;
58 std::string reason;
59 app_info.GetPrimaryApkOptimizationStatus(&filter, &reason);
60
61 ASSERT_EQ(filter, "filter");
62 ASSERT_EQ(reason, "reason");
63 }
64
TEST(AppInfoTest,RegisterAppInfoWithOdexStatusMultiplePrimary)65 TEST(AppInfoTest, RegisterAppInfoWithOdexStatusMultiplePrimary) {
66 AppInfo app_info;
67 app_info.RegisterOdexStatus(
68 "code_location",
69 "filter",
70 "reason",
71 "odex_status");
72 app_info.RegisterOdexStatus(
73 "code_location2",
74 "filter2",
75 "reason2",
76 "odex_status");
77 app_info.RegisterAppInfo(
78 "package_name",
79 std::vector<std::string>({"code_location"}),
80 "",
81 "",
82 AppInfo::CodeType::kPrimaryApk);
83
84 std::string filter;
85 std::string reason;
86 app_info.GetPrimaryApkOptimizationStatus(&filter, &reason);
87
88 // The optimization status should be the one of the first apk.
89 ASSERT_EQ(filter, "filter");
90 ASSERT_EQ(reason, "reason");
91 }
92
TEST(AppInfoTest,RegisterAppInfoWithOdexStatusNoPrimary)93 TEST(AppInfoTest, RegisterAppInfoWithOdexStatusNoPrimary) {
94 AppInfo app_info;
95
96 // Check that the status is not known in an empty app_info.
97 std::string filter;
98 std::string reason;
99 app_info.GetPrimaryApkOptimizationStatus(&filter, &reason);
100
101 // Register a split.s
102 app_info.RegisterAppInfo(
103 "package_name",
104 std::vector<std::string>({"code_location"}),
105 "",
106 "",
107 AppInfo::CodeType::kSplitApk);
108 app_info.RegisterOdexStatus(
109 "code_location",
110 "filter",
111 "reason",
112 "odex_status");
113
114
115 // The optimization status is unknown since we don't have primary apks.
116 app_info.GetPrimaryApkOptimizationStatus(&filter, &reason);
117 ASSERT_EQ(filter, "unknown");
118 ASSERT_EQ(reason, "unknown");
119 }
120
121 } // namespace art
122