Add unittest
[platform/core/appfw/launchpad.git] / tests / launchpad-process-pool-unittest / src / test_launchpad.cc
1 /*
2  * Copyright (c) 2023 Samsung Electronics Co., Ltd All Rights Reserved
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 <bundle_cpp.h>
18 #include <gmock/gmock.h>
19 #include <gtest/gtest.h>
20 #include <iostream>
21 #include <stdexcept>
22
23 #include <fstream>
24 #include <string>
25
26 #include "debugger_info.hh"
27 #include "launcher_info.hh"
28 #include "loader_info.hh"
29
30 using ::testing::AtLeast;
31 using namespace launchpad;
32
33 class LaunchpadTest : public ::testing::Test {
34  public:
35   virtual void SetUp() {
36     std::ofstream of;
37     of.open(test_debugger);
38     of << test_debugger;
39     of.close();
40
41     of.open(test_launcher);
42     of << test_launcher;
43     of.close();
44
45     of.open(test_loader);
46     of << test_loader;
47     of.close();
48
49     of.open(test_debugger_info_file);
50     of << R"__test(
51 [DEBUGGER]
52 NAME    DEBUG
53 EXE     test_debugger
54 APP_TYPE        capp|c++app
55 EXTRA_KEY       __DLP_DEBUG_ARG__
56 DEFAULT_OPT     --wrapper
57 DEFAULT_OPT     env
58 DEFAULT_OPT     OPENSSL_armcap=0
59 DEFAULT_OPT     --
60 )__test";
61     of.close();
62
63     of.open(test_launcher_info_file);
64     of << R"__test(
65 [LAUNCHER]
66 NAME         dotnet-launcher
67 EXE          test_launcher
68 APP_TYPE     dotnet
69 EXTRA_ARG    --PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE
70 EXTRA_ARG    --profile
71 EXTRA_ARG    --appType
72 EXTRA_ARG    dotnet
73 EXTRA_ARG    TIZEN_UIFW
74 EXTRA_ARG    ElmSharp
75 EXTRA_ARG    --standalone
76 )__test";
77     of.close();
78
79     of.open(test_loader_info_file);
80     of << R"__test(
81 [LOADER]
82 NAME    hw-loader1
83 EXE     /usr/bin/launchpad-loader
84 APP_TYPE        capp|c++app
85 HW_ACC          ON
86 DETECTION_METHOD        TIMEOUT|VISIBILITY
87 TIMEOUT         5000
88 EXTRA           loader_type      hw-loader
89 EXTRA_ARRAY             preload
90 EXTRA_ARRAY_VAL         /usr/lib/libappcore-efl.so.1
91 EXTRA_ARRAY_VAL         /usr/lib/libappcore-common.so.1
92 EXTRA_ARRAY_VAL         /usr/lib/libcapi-appfw-application.so.0
93 EXTRA_ARRAY_VAL         /usr/lib/ecore_imf/modules/wayland/v-1.25/module.so
94 EXTRA_ARRAY_VAL         /usr/lib/libdali-toolkit.so
95 EXTRA_ARRAY_VAL         /usr/lib/libcairo.so.2
96 EXTRA_ARRAY_VAL         /usr/lib/libcapi-media-player.so.0
97 EXTRA_ARRAY_VAL         /usr/lib/libcapi-media-camera.so.0
98 EXTRA_ARRAY_VAL         /usr/lib/ecore_evas/engines/extn/v-1.25/module.so
99 ALTERNATIVE_LOADER      common-loader1
100 EXTRA   threads   7
101
102 )__test";
103     of.close();
104   }
105
106   virtual void TearDown() {}
107
108  private:
109   const std::string test_debugger = "test_debugger";
110   const std::string test_launcher = "test_launcher";
111   const std::string test_loader = "test_loader";
112   const std::string test_debugger_info_file = "test.debugger";
113   const std::string test_launcher_info_file = "test.launcher";
114   const std::string test_loader_info_file = "test.loader";
115 };
116
117 TEST_F(LaunchpadTest, DebuggerInfoTest) {
118   /* Test debugger info file
119   [DEBUGGER]
120   NAME  DEBUG
121   EXE   test_debugger
122   APP_TYPE      capp|c++app
123   EXTRA_KEY     __DLP_DEBUG_ARG__
124   DEFAULT_OPT   --wrapper
125   DEFAULT_OPT   env
126   DEFAULT_OPT   OPENSSL_armcap=0
127   DEFAULT_OPT   --
128   */
129
130   DebuggerInfoInflator inflator;
131   auto list = inflator.Inflate(".");
132   EXPECT_EQ(list.size(), 1);
133   auto info = std::move(list.front());
134   EXPECT_EQ(info->GetName(), "DEBUG");
135   EXPECT_EQ(info->GetExe(), "test_debugger");
136   EXPECT_EQ(info->GetAppTypes().size(), 2);
137   EXPECT_EQ(info->GetAppTypes()[0], "capp");
138   EXPECT_EQ(info->GetAppTypes()[1], "c++app");
139   EXPECT_EQ(info->GetExtraKeyList().size(), 1);
140   EXPECT_EQ(info->GetExtraKeyList()[0], "__DLP_DEBUG_ARG__");
141   EXPECT_EQ(info->GetDefaultOptList().size(), 4);
142   EXPECT_EQ(info->GetDefaultOptList()[0], "--wrapper");
143   EXPECT_EQ(info->GetDefaultOptList()[1], "env");
144   EXPECT_EQ(info->GetDefaultOptList()[2], "OPENSSL_armcap=0");
145   EXPECT_EQ(info->GetDefaultOptList()[3], "--");
146 }
147
148 TEST_F(LaunchpadTest, LauncherInfoTest) {
149   /* Test launcher info file
150   [LAUNCHER]
151   NAME         dotnet-launcher
152   EXE          test_launcher
153   APP_TYPE     dotnet
154   EXTRA_ARG
155   --PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE
156   EXTRA_ARG    --profile
157   EXTRA_ARG    --appType
158   EXTRA_ARG    dotnet
159   EXTRA_ARG    TIZEN_UIFW
160   EXTRA_ARG    ElmSharp
161   EXTRA_ARG    --standalone
162   */
163
164   LauncherInfoInflator inflator;
165   auto list = inflator.Inflate(".");
166   EXPECT_EQ(list.size(), 1);
167   auto info = std::move(list.front());
168   EXPECT_EQ(info->GetName(), "dotnet-launcher");
169   EXPECT_EQ(info->GetExe(), "test_launcher");
170   EXPECT_EQ(info->GetAppTypes().size(), 1);
171   EXPECT_EQ(info->GetAppTypes()[0], "dotnet");
172   EXPECT_EQ(info->GetExtraArgs().size(), 7);
173   EXPECT_EQ(info->GetExtraArgs()[0],
174             "--PADDING_TO_CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE_PADDING_TO_"
175             "CHANGE_CMDLINE_PADDING_TO_CHANGE_CMDLINE");
176   EXPECT_EQ(info->GetExtraArgs()[1], "--profile");
177   EXPECT_EQ(info->GetExtraArgs()[2], "--appType");
178   EXPECT_EQ(info->GetExtraArgs()[3], "dotnet");
179   EXPECT_EQ(info->GetExtraArgs()[4], "TIZEN_UIFW");
180   EXPECT_EQ(info->GetExtraArgs()[5], "ElmSharp");
181   EXPECT_EQ(info->GetExtraArgs()[6], "--standalone");
182 }
183
184 TEST_F(LaunchpadTest, LoaderInfoTest) {
185 /* Test loader info file
186 [LOADER]
187 NAME    hw-loader1
188 EXE     /usr/bin/launchpad-loader
189 APP_TYPE        capp|c++app
190 HW_ACC          ON
191 DETECTION_METHOD        TIMEOUT|VISIBILITY
192 TIMEOUT         5000
193 EXTRA           loader_type      hw-loader
194 EXTRA_ARRAY             preload
195 EXTRA_ARRAY_VAL         /usr/lib/libappcore-efl.so.1
196 EXTRA_ARRAY_VAL         /usr/lib/libappcore-common.so.1
197 EXTRA_ARRAY_VAL         /usr/lib/libcapi-appfw-application.so.0
198 EXTRA_ARRAY_VAL         /usr/lib/ecore_imf/modules/wayland/v-1.25/module.so
199 EXTRA_ARRAY_VAL         /usr/lib/libdali-toolkit.so
200 EXTRA_ARRAY_VAL         /usr/lib/libcairo.so.2
201 EXTRA_ARRAY_VAL         /usr/lib/libcapi-media-player.so.0
202 EXTRA_ARRAY_VAL         /usr/lib/libcapi-media-camera.so.0
203 EXTRA_ARRAY_VAL         /usr/lib/ecore_evas/engines/extn/v-1.25/module.so
204 ALTERNATIVE_LOADER      common-loader1
205 EXTRA   threads   7
206 */
207
208   LoaderInfoInflator inflator;
209   auto list = inflator.Inflate(".");
210   EXPECT_EQ(list.size(), 1);
211   auto info = std::move(list.front());
212   EXPECT_EQ(info->GetName(), "hw-loader1");
213   EXPECT_EQ(info->GetExe(), "/usr/bin/launchpad-loader");
214   EXPECT_EQ(info->GetAppTypes().size(), 2);
215   EXPECT_EQ(info->GetAppTypes()[0], "capp");
216   EXPECT_EQ(info->GetAppTypes()[1], "c++app");
217   EXPECT_EQ(info->GetHwAcc(), "ON");
218   EXPECT_EQ(info->GetDetectionMethod(), LoaderMethod::Timeout |
219                                             LoaderMethod::Visibility |
220                                             LoaderMethod::Install);
221   EXPECT_EQ(info->GetTimeoutVal(), 5000);
222   auto& b = info->GetExtra();
223   EXPECT_EQ(b.GetString("loader_type"), "hw-loader");
224   EXPECT_EQ(b.GetString("threads"), "7");
225   auto arr = b.GetStringArray("preload");
226   EXPECT_EQ(arr.size(), 9);
227   EXPECT_EQ(arr[0], "/usr/lib/libappcore-efl.so.1");
228   EXPECT_EQ(arr[1], "/usr/lib/libappcore-common.so.1");
229   EXPECT_EQ(arr[2], "/usr/lib/libcapi-appfw-application.so.0");
230   EXPECT_EQ(arr[3], "/usr/lib/ecore_imf/modules/wayland/v-1.25/module.so");
231   EXPECT_EQ(arr[4], "/usr/lib/libdali-toolkit.so");
232   EXPECT_EQ(arr[5], "/usr/lib/libcairo.so.2");
233   EXPECT_EQ(arr[6], "/usr/lib/libcapi-media-player.so.0");
234   EXPECT_EQ(arr[7], "/usr/lib/libcapi-media-camera.so.0");
235   EXPECT_EQ(arr[8], "/usr/lib/ecore_evas/engines/extn/v-1.25/module.so");
236 }