2 * Copyright (c) 2016 - 2020 Samsung Electronics Co., Ltd All Rights Reserved
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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
17 #include <sys/types.h>
24 #include <dpl/test/test_runner.h>
25 #include <dpl/test/test_runner_child.h>
27 #include <tests_common.h>
28 #include <test-certs.h>
29 #include <scoped-app-context.h>
30 #include <ckm-common.h>
31 #include <ckm-privileged-common.h>
33 #include <ckm/ckm-manager.h>
34 #include <ckm/ckm-control.h>
35 #include <ckm/ckm-password.h>
36 #include <ckm/ckm-type.h>
37 #include <ckm/ckm-pkcs12.h>
39 #include <openssl/x509.h>
40 #include <openssl/x509v3.h>
43 const int USER_APP = 5000;
44 const int GROUP_APP = 5000;
46 const int USER_APP_2 = 5020;
47 const int USER_APP_3 = 5030;
49 const char * const APP_PASS = "user-pass";
50 const int USER_TEST = 5001;
52 const CKM::CertificateShPtrVector EMPTY_CERT_VECTOR;
53 const CKM::AliasVector EMPTY_ALIAS_VECTOR;
54 } // namespace anonymous
57 * How to numerate tests:
59 * T - test case (always T)
60 * AB - number of test group (always two digits)
61 * C - test number in group (all tests with same TABC must be run in the same time).
65 RUNNER_TEST_GROUP_INIT(T151_CKM_STORAGE_PERNAMENT_TESTS);
67 RUNNER_TEST(T1510_init_unlock_key)
69 reset_user_data(USER_TEST, APP_PASS);
72 RUNNER_TEST(T1511_insert_data)
74 auto certee = TestData::getTestCertificate(TestData::OCSP_AVAILABLE_LEAF);
75 auto certim = TestData::getTestCertificate(TestData::OCSP_AVAILABLE_IM);
76 CKM::Alias certeeAlias("CertEE");
77 CKM::Alias certimAlias("CertIM");
79 ScopedDBUnlock unlock(USER_TEST, APP_PASS);
80 ScopedAppContext ctx(TEST_LABEL, USER_TEST, GROUP_APP);
82 auto manager = CKM::Manager::create();
83 RUNNER_ASSERT(CKM_API_SUCCESS == manager->saveCertificate(certeeAlias, certee, CKM::Policy()));
84 RUNNER_ASSERT(CKM_API_SUCCESS == manager->saveCertificate(certimAlias, certim, CKM::Policy()));
88 stop_service(MANAGER);
89 start_service(MANAGER);
93 ScopedDBUnlock unlock(USER_TEST, APP_PASS);
94 ScopedAppContext ctx(TEST_LABEL, USER_TEST, GROUP_APP);
96 auto manager = CKM::Manager::create();
97 int status1 = manager->saveCertificate(certeeAlias, certee, CKM::Policy());
98 int status2 = manager->saveCertificate(certimAlias, certim, CKM::Policy());
100 CKM_API_ERROR_DB_ALIAS_EXISTS == status1,
101 "Certificate should be in database already. Error=" << CKM::APICodeToString(status1));
103 CKM_API_ERROR_DB_ALIAS_EXISTS == status2,
104 "Certificate should be in database already. Error=" << CKM::APICodeToString(status2));
108 RUNNER_TEST(T1519_deinit)
110 remove_user_data(USER_TEST);
113 RUNNER_TEST_GROUP_INIT(T170_CKM_STORAGE_PERNAMENT_TESTS);
115 RUNNER_TEST(T1701_init_unlock_key)
117 unlock_user_data(USER_TEST+1, "t170-special-password");
119 ScopedAppContext ctx(TEST_LABEL, USER_TEST+1, GROUP_APP);
122 RUNNER_CHILD_TEST(T1702_insert_data)
125 ScopedAppContext ctx(TEST_LABEL, USER_TEST+1, GROUP_APP);
127 auto certee = TestData::getTestCertificate(TestData::THIRD_PARTY_LEAF);
129 auto manager = CKM::Manager::create();
130 size_t current_aliases_num = count_aliases(ALIAS_CERT);
131 int status1 = manager->saveCertificate(CKM::Alias("CertEEE"), certee, CKM::Policy());
134 CKM_API_SUCCESS == status1,
135 "Could not put certificate in datbase. Error=" << CKM::APICodeToString(status1));
139 CKM_API_SUCCESS == (temp = manager->getCertificateAliasVector(av)),
140 "Error=" << CKM::APICodeToString(temp));
142 (current_aliases_num+1) == static_cast<size_t>(temp = av.size()),
143 "Vector size: " << temp << ". Expected: " << (current_aliases_num+1));
146 RUNNER_TEST(T1703_removeApplicationData)
149 auto control = CKM::Control::create();
151 CKM_API_SUCCESS == (tmp = control->removeApplicationData(TEST_LABEL)),
152 "Error=" << CKM::APICodeToString(tmp));
155 RUNNER_CHILD_TEST(T1704_data_test)
158 ScopedAppContext ctx(TEST_LABEL, USER_TEST+1, GROUP_APP);
161 auto manager = CKM::Manager::create();
164 CKM_API_SUCCESS == (temp = manager->getCertificateAliasVector(av)),
165 "Error=" << CKM::APICodeToString(temp));
167 0 == (temp = av.size()),
168 "Vector size: " << temp << ". Expected: 0");
171 RUNNER_TEST(T1705_deinit)
173 remove_user_data(USER_TEST+1);
176 RUNNER_TEST(T17101_init)
180 auto control = CKM::Control::create();
182 CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+2)),
183 "Error=" << CKM::APICodeToString(tmp));
185 CKM_API_SUCCESS == (tmp = control->removeUserData(USER_TEST+2)),
186 "Error=" << CKM::APICodeToString(tmp));
188 CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+2, "t1706-special-password")),
189 "Error=" << CKM::APICodeToString(tmp));
192 CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+3)),
193 "Error=" << CKM::APICodeToString(tmp));
195 CKM_API_SUCCESS == (tmp = control->removeUserData(USER_TEST+3)),
196 "Error=" << CKM::APICodeToString(tmp));
198 CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+3, "t1706-special-password")),
199 "Error=" << CKM::APICodeToString(tmp));
202 RUNNER_CHILD_TEST(T17102_prep_data_01)
205 ScopedAppContext ctx(TEST_LABEL, USER_TEST+2, GROUP_APP);
208 auto manager = CKM::Manager::create();
210 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
212 CKM::RawBuffer buffer(data.begin(), data.end());
213 CKM::Policy exportable(CKM::Password(), true);
216 CKM_API_SUCCESS == (temp = manager->saveData("data1", buffer, exportable)),
217 "Error=" << CKM::APICodeToString(temp));
220 RUNNER_CHILD_TEST(T17103_prep_data_02)
223 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+2, GROUP_APP);
226 auto manager = CKM::Manager::create();
228 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
230 CKM::RawBuffer buffer(data.begin(), data.end());
231 CKM::Policy exportable(CKM::Password(), true);
234 CKM_API_SUCCESS == (temp = manager->saveData("data2", buffer, exportable)),
235 "Error=" << CKM::APICodeToString(temp));
238 RUNNER_CHILD_TEST(T17104_prep_data_03)
241 ScopedAppContext ctx(TEST_LABEL, USER_TEST+3, GROUP_APP);
244 auto manager = CKM::Manager::create();
246 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
248 CKM::RawBuffer buffer(data.begin(), data.end());
249 CKM::Policy exportable(CKM::Password(), true);
252 CKM_API_SUCCESS == (temp = manager->saveData("data3", buffer, exportable)),
253 "Error=" << CKM::APICodeToString(temp));
256 RUNNER_CHILD_TEST(T17105_prep_data_04)
259 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+3, GROUP_APP);
262 auto manager = CKM::Manager::create();
264 std::string data = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2b1bXDa+S8/MGWnMkru4";
266 CKM::RawBuffer buffer(data.begin(), data.end());
267 CKM::Policy exportable(CKM::Password(), true);
270 CKM_API_SUCCESS == (temp = manager->saveData("data4", buffer, exportable)),
271 "Error=" << CKM::APICodeToString(temp));
274 RUNNER_TEST(T17106_remove_application)
278 auto control = CKM::Control::create();
280 CKM_API_SUCCESS == (tmp = control->lockUserKey(USER_TEST+3)),
281 "Error=" << CKM::APICodeToString(tmp));
283 CKM_API_SUCCESS == (tmp = control->removeApplicationData(TEST_LABEL)),
284 "Error=" << CKM::APICodeToString(tmp));
287 RUNNER_CHILD_TEST(T17107_check_data_01)
290 ScopedAppContext ctx(TEST_LABEL, USER_TEST+2, GROUP_APP);
293 auto manager = CKM::Manager::create();
296 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
297 "Error=" << CKM::APICodeToString(temp));
299 0 == (temp = av.size()),
300 "Vector size: " << temp << ". Expected: 0");
303 RUNNER_CHILD_TEST(T17108_check_data_02)
306 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+2, GROUP_APP);
309 auto manager = CKM::Manager::create();
312 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
313 "Error=" << CKM::APICodeToString(temp));
315 1 == (temp = av.size()),
316 "Vector size: " << temp << ". Expected: 1");
319 RUNNER_TEST(T17109_unlock_user2)
323 auto control = CKM::Control::create();
325 CKM_API_SUCCESS == (tmp = control->unlockUserKey(USER_TEST+3, "t1706-special-password")),
326 "Error=" << CKM::APICodeToString(tmp));
329 RUNNER_CHILD_TEST(T17110_check_data_03)
332 ScopedAppContext ctx(TEST_LABEL, USER_TEST+3, GROUP_APP);
335 auto manager = CKM::Manager::create();
338 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
339 "Error=" << CKM::APICodeToString(temp));
341 0 == (temp = av.size()),
342 "Vector size: " << temp << ". Expected: 0");
345 RUNNER_CHILD_TEST(T17111_check_data_04)
348 ScopedAppContext ctx(TEST_LABEL_2, USER_TEST+3, GROUP_APP);
351 auto manager = CKM::Manager::create();
354 CKM_API_SUCCESS == (temp = manager->getDataAliasVector(av)),
355 "Error=" << CKM::APICodeToString(temp));
357 1 == (temp = av.size()),
358 "Vector size: " << temp << ". Expected: 1");
361 RUNNER_TEST(T17112_deinit)
363 remove_user_data(USER_TEST+2);
364 remove_user_data(USER_TEST+3);
367 int main(int argc, char *argv[])
371 std::cerr << argv[0] << " should be executed as root. Aborting" << std::endl;
374 return DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);