2 * Copyright (c) 2016 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 * @file test-api-content-screening.cpp
18 * @author Kyungwook Tak (k.tak@samsung.com)
20 * @brief CSR Content screening API test
22 #include <csr-content-screening.h>
32 #include <boost/test/unit_test.hpp>
34 #include "test-common.h"
35 #include "test-helper.h"
36 #include "test-resource.h"
38 BOOST_AUTO_TEST_SUITE(API_CONTENT_SCREENING)
40 BOOST_AUTO_TEST_CASE(context_create_destroy)
44 Test::Context<csr_cs_context_h>();
49 BOOST_AUTO_TEST_CASE(set_values_to_context_positive)
53 auto c = Test::Context<csr_cs_context_h>();
54 auto context = c.get();
56 ASSERT_SUCCESS(csr_cs_set_ask_user(context, CSR_CS_ASK_USER_NO));
57 ASSERT_SUCCESS(csr_cs_set_ask_user(context, CSR_CS_ASK_USER_YES));
59 ASSERT_SUCCESS(csr_cs_set_popup_message(context, "Test popup message"));
61 ASSERT_SUCCESS(csr_cs_set_core_usage(context, CSR_CS_CORE_USAGE_DEFAULT));
62 ASSERT_SUCCESS(csr_cs_set_core_usage(context, CSR_CS_CORE_USAGE_ALL));
63 ASSERT_SUCCESS(csr_cs_set_core_usage(context, CSR_CS_CORE_USAGE_HALF));
64 ASSERT_SUCCESS(csr_cs_set_core_usage(context, CSR_CS_CORE_USAGE_SINGLE));
66 ASSERT_SUCCESS(csr_cs_set_scan_on_cloud(context, true));
67 ASSERT_SUCCESS(csr_cs_set_scan_on_cloud(context, false));
72 BOOST_AUTO_TEST_CASE(set_values_to_context_negative)
76 auto c = Test::Context<csr_cs_context_h>();
77 auto context = c.get();
79 ASSERT_IF(csr_cs_set_ask_user(context, static_cast<csr_cs_ask_user_e>(0x926ce)),
80 CSR_ERROR_INVALID_PARAMETER);
82 ASSERT_IF(csr_cs_set_popup_message(context, nullptr), CSR_ERROR_INVALID_PARAMETER);
83 ASSERT_IF(csr_cs_set_popup_message(context, ""), CSR_ERROR_INVALID_PARAMETER);
85 ASSERT_IF(csr_cs_set_core_usage(context,
86 static_cast<csr_cs_core_usage_e>(0x882a2)),
87 CSR_ERROR_INVALID_PARAMETER);
92 BOOST_AUTO_TEST_CASE(scan_data_normal)
96 auto c = Test::Context<csr_cs_context_h>();
97 auto context = c.get();
98 csr_cs_malware_h detected;
99 unsigned char data[100] = {0, };
101 // no malware detected
102 ASSERT_SUCCESS(csr_cs_scan_data(context, data, sizeof(data), &detected));
104 CHECK_IS_NULL(detected);
109 BOOST_AUTO_TEST_CASE(scan_data_high)
111 EXCEPTION_GUARD_START
113 auto c = Test::Context<csr_cs_context_h>();
114 auto context = c.get();
115 csr_cs_malware_h detected;
116 unsigned char data[100] = {0, };
117 time_t start_time = time(nullptr);
119 // severity high detected
120 memcpy(data, MALWARE_HIGH_SIGNATURE, strlen(MALWARE_HIGH_SIGNATURE));
121 ASSERT_SUCCESS(csr_cs_scan_data(context, data, sizeof(data), &detected));
123 CHECK_IS_NOT_NULL(detected);
124 ASSERT_DETECTED(detected, MALWARE_HIGH_NAME, MALWARE_HIGH_SEVERITY,
125 MALWARE_HIGH_DETAILED_URL);
126 ASSERT_DETECTED_EXT(detected, start_time, nullptr, false, nullptr);
131 BOOST_AUTO_TEST_CASE(scan_data_medium)
133 EXCEPTION_GUARD_START
135 auto c = Test::Context<csr_cs_context_h>();
136 auto context = c.get();
137 csr_cs_malware_h detected;
138 unsigned char data[100] = {0, };
139 time_t start_time = time(nullptr);
141 // severity medium detected
142 memcpy(data, MALWARE_MEDIUM_SIGNATURE, strlen(MALWARE_MEDIUM_SIGNATURE));
143 ASSERT_SUCCESS(csr_cs_scan_data(context, data, sizeof(data), &detected));
145 CHECK_IS_NOT_NULL(detected);
146 ASSERT_DETECTED(detected, MALWARE_MEDIUM_NAME, MALWARE_MEDIUM_SEVERITY,
147 MALWARE_MEDIUM_DETAILED_URL);
148 ASSERT_DETECTED_EXT(detected, start_time, nullptr, false, nullptr);
153 BOOST_AUTO_TEST_CASE(scan_data_low)
155 EXCEPTION_GUARD_START
157 auto c = Test::Context<csr_cs_context_h>();
158 auto context = c.get();
159 csr_cs_malware_h detected;
160 unsigned char data[100] = {0, };
161 time_t start_time = time(nullptr);
163 // severity low detected
164 memcpy(data, MALWARE_LOW_SIGNATURE, strlen(MALWARE_LOW_SIGNATURE));
165 ASSERT_SUCCESS(csr_cs_scan_data(context, data, sizeof(data), &detected));
167 CHECK_IS_NOT_NULL(detected);
168 ASSERT_DETECTED(detected, MALWARE_LOW_NAME, MALWARE_LOW_SEVERITY,
169 MALWARE_LOW_DETAILED_URL);
170 ASSERT_DETECTED_EXT(detected, start_time, nullptr, false, nullptr);
175 BOOST_AUTO_TEST_CASE(scan_data_negative)
177 EXCEPTION_GUARD_START
179 auto c = Test::Context<csr_cs_context_h>();
180 auto context = c.get();
181 csr_cs_malware_h detected;
182 unsigned char data[100] = {0, };
184 ASSERT_IF(csr_cs_scan_data(nullptr, data, sizeof(data), &detected),
185 CSR_ERROR_INVALID_HANDLE);
187 ASSERT_IF(csr_cs_scan_data(context, nullptr, sizeof(data), &detected),
188 CSR_ERROR_INVALID_PARAMETER);
190 ASSERT_IF(csr_cs_scan_data(context, data, sizeof(data), nullptr),
191 CSR_ERROR_INVALID_PARAMETER);
196 BOOST_AUTO_TEST_CASE(scan_file_normal)
198 EXCEPTION_GUARD_START
200 auto c = Test::Context<csr_cs_context_h>();
201 auto context = c.get();
202 csr_cs_malware_h detected;
204 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_NORMAL, &detected));
206 // no malware detected
207 CHECK_IS_NULL(detected);
212 BOOST_AUTO_TEST_CASE(scan_file_high)
214 EXCEPTION_GUARD_START
216 auto c = Test::Context<csr_cs_context_h>();
217 auto context = c.get();
218 csr_cs_malware_h detected;
219 time_t start_time = time(nullptr);
221 Test::touch_file(TEST_FILE_HIGH);
223 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_HIGH, &detected));
225 CHECK_IS_NOT_NULL(detected);
226 ASSERT_DETECTED(detected, MALWARE_HIGH_NAME, MALWARE_HIGH_SEVERITY,
227 MALWARE_HIGH_DETAILED_URL);
228 ASSERT_DETECTED_EXT(detected, start_time, TEST_FILE_HIGH, false, nullptr);
233 BOOST_AUTO_TEST_CASE(scan_file_medium)
235 EXCEPTION_GUARD_START
237 auto c = Test::Context<csr_cs_context_h>();
238 auto context = c.get();
239 csr_cs_malware_h detected;
240 time_t start_time = time(nullptr);
242 Test::touch_file(TEST_FILE_MEDIUM);
244 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIUM, &detected));
246 CHECK_IS_NOT_NULL(detected);
247 ASSERT_DETECTED(detected, MALWARE_MEDIUM_NAME, MALWARE_MEDIUM_SEVERITY,
248 MALWARE_MEDIUM_DETAILED_URL);
249 ASSERT_DETECTED_EXT(detected, start_time, TEST_FILE_MEDIUM, false, nullptr);
254 BOOST_AUTO_TEST_CASE(scan_file_low)
256 EXCEPTION_GUARD_START
258 auto c = Test::Context<csr_cs_context_h>();
259 auto context = c.get();
260 csr_cs_malware_h detected;
261 time_t start_time = time(nullptr);
263 Test::touch_file(TEST_FILE_LOW);
265 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_LOW, &detected));
267 CHECK_IS_NOT_NULL(detected);
268 ASSERT_DETECTED(detected, MALWARE_LOW_NAME, MALWARE_LOW_SEVERITY,
269 MALWARE_LOW_DETAILED_URL);
270 ASSERT_DETECTED_EXT(detected, start_time, TEST_FILE_LOW, false, nullptr);
275 BOOST_AUTO_TEST_CASE(scan_file_media_dir)
277 EXCEPTION_GUARD_START
279 auto c = Test::Context<csr_cs_context_h>();
280 auto context = c.get();
281 csr_cs_malware_h detected;
282 time_t start_time = time(nullptr);
284 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
286 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
288 CHECK_IS_NOT_NULL(detected);
289 ASSERT_DETECTED(detected, MALWARE_HIGH_NAME, MALWARE_HIGH_SEVERITY,
290 MALWARE_HIGH_DETAILED_URL);
291 ASSERT_DETECTED_EXT(detected, start_time, TEST_FILE_MEDIA, false, nullptr);
296 BOOST_AUTO_TEST_CASE(scan_file_tmp_dir)
298 EXCEPTION_GUARD_START
300 auto c = Test::Context<csr_cs_context_h>();
301 auto context = c.get();
302 csr_cs_malware_h detected;
303 time_t start_time = time(nullptr);
305 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_TMP);
307 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_TMP, &detected));
309 CHECK_IS_NOT_NULL(detected);
310 ASSERT_DETECTED(detected, MALWARE_HIGH_NAME, MALWARE_HIGH_SEVERITY,
311 MALWARE_HIGH_DETAILED_URL);
312 ASSERT_DETECTED_EXT(detected, start_time, TEST_FILE_TMP, false, nullptr);
317 // TODO : Add TC for different directories
318 BOOST_AUTO_TEST_CASE(scan_file_wgt_dir)
320 EXCEPTION_GUARD_START
322 auto c = Test::Context<csr_cs_context_h>();
323 auto context = c.get();
324 csr_cs_malware_h detected;
325 time_t start_time = time(nullptr);
327 Test::uninstall_app(TEST_WGT_PKG_ID);
328 ASSERT_INSTALL_APP(TEST_WGT_PATH, TEST_WGT_TYPE);
330 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_WGT_MAL_FILE, &detected));
332 CHECK_IS_NOT_NULL(detected);
333 ASSERT_DETECTED(detected, MALWARE_HIGH_NAME, MALWARE_HIGH_SEVERITY,
334 MALWARE_HIGH_DETAILED_URL);
335 ASSERT_DETECTED_EXT(detected, start_time, TEST_WGT_APP_ROOT, true, TEST_WGT_PKG_ID);
337 ASSERT_UNINSTALL_APP(TEST_WGT_PKG_ID);
342 // TODO : Add TC for different directories
343 BOOST_AUTO_TEST_CASE(scan_file_tpk_dir)
345 EXCEPTION_GUARD_START
347 auto c = Test::Context<csr_cs_context_h>();
348 auto context = c.get();
349 csr_cs_malware_h detected;
350 time_t start_time = time(nullptr);
352 Test::uninstall_app(TEST_TPK_PKG_ID);
353 ASSERT_INSTALL_APP(TEST_TPK_PATH, TEST_TPK_TYPE);
355 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_TPK_MAL_FILE, &detected));
357 CHECK_IS_NOT_NULL(detected);
358 ASSERT_DETECTED(detected, MALWARE_HIGH_NAME, MALWARE_HIGH_SEVERITY,
359 MALWARE_HIGH_DETAILED_URL);
360 ASSERT_DETECTED_EXT(detected, start_time, TEST_TPK_APP_ROOT, true, TEST_TPK_PKG_ID);
362 ASSERT_UNINSTALL_APP(TEST_TPK_PKG_ID);
367 BOOST_AUTO_TEST_CASE(scan_file_invalid_params)
370 EXCEPTION_GUARD_START
372 auto c = Test::Context<csr_cs_context_h>();
373 auto context = c.get();
374 csr_cs_malware_h detected;
376 ASSERT_IF(csr_cs_scan_file(nullptr, TEST_FILE_NORMAL, &detected),
377 CSR_ERROR_INVALID_HANDLE);
378 ASSERT_IF(csr_cs_scan_file(context, nullptr, &detected), CSR_ERROR_INVALID_PARAMETER);
379 ASSERT_IF(csr_cs_scan_file(context, TEST_FILE_NORMAL, nullptr),
380 CSR_ERROR_INVALID_PARAMETER);
385 BOOST_AUTO_TEST_CASE(scan_file_not_existing_file)
387 EXCEPTION_GUARD_START
389 auto c = Test::Context<csr_cs_context_h>();
390 auto context = c.get();
391 csr_cs_malware_h detected;
393 ASSERT_IF(csr_cs_scan_file(context, TEST_FILE_NO_EXIST, &detected),
394 CSR_ERROR_FILE_DO_NOT_EXIST);
399 BOOST_AUTO_TEST_CASE(get_detected_malware)
401 EXCEPTION_GUARD_START
403 auto c = Test::Context<csr_cs_context_h>();
404 auto context = c.get();
405 csr_cs_malware_h detected;
406 csr_cs_malware_h stored;
408 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIUM, &detected));
409 CHECK_IS_NOT_NULL(detected);
411 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIUM, &stored));
412 CHECK_IS_NOT_NULL(stored);
414 ASSERT_DETECTED_HANDLE(detected, stored);
419 BOOST_AUTO_TEST_CASE(get_detected_malware_invalid_param)
421 EXCEPTION_GUARD_START
423 auto c = Test::Context<csr_cs_context_h>();
424 auto context = c.get();
425 csr_cs_malware_h stored;
427 ASSERT_IF(csr_cs_get_detected_malware(nullptr, TEST_FILE_MEDIUM, &stored),
428 CSR_ERROR_INVALID_HANDLE);
429 ASSERT_IF(csr_cs_get_detected_malware(context, nullptr, &stored),
430 CSR_ERROR_INVALID_PARAMETER);
431 ASSERT_IF(csr_cs_get_detected_malware(context, TEST_FILE_MEDIUM, nullptr),
432 CSR_ERROR_INVALID_PARAMETER);
437 BOOST_AUTO_TEST_CASE(get_detected_malware_not_existing_file)
439 EXCEPTION_GUARD_START
441 auto c = Test::Context<csr_cs_context_h>();
442 auto context = c.get();
443 csr_cs_malware_h stored;
445 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_NO_EXIST, &stored));
446 CHECK_IS_NULL(stored);
451 BOOST_AUTO_TEST_CASE(get_detected_malwares)
453 EXCEPTION_GUARD_START
455 auto c = Test::Context<csr_cs_context_h>();
456 auto context = c.get();
457 csr_cs_malware_list_h detected_list;
458 csr_cs_malware_h detected_high, detected_medium;
459 csr_cs_malware_h stored;
460 Test::ScopedCstr file_path_actual;
463 size_t compared_cnt = 0;
465 const char *dirs[1] = {
469 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_HIGH, &detected_high));
470 CHECK_IS_NOT_NULL(detected_high);
471 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIUM, &detected_medium));
472 CHECK_IS_NOT_NULL(detected_medium);
474 ASSERT_SUCCESS(csr_cs_get_detected_malwares(context, dirs,
475 sizeof(dirs) / sizeof(const char *),
476 &detected_list, &cnt));
477 CHECK_IS_NOT_NULL(detected_list);
479 for (idx = 0; idx < cnt; idx++) {
480 ASSERT_SUCCESS(csr_cs_malware_list_get_malware(detected_list, idx, &stored));
481 CHECK_IS_NOT_NULL(stored);
482 ASSERT_SUCCESS(csr_cs_malware_get_file_name(stored, &file_path_actual.ptr));
483 if (strcmp(TEST_FILE_HIGH, file_path_actual.ptr) == 0) {
484 ASSERT_DETECTED_HANDLE(detected_high, stored);
486 } else if (strcmp(TEST_FILE_MEDIUM, file_path_actual.ptr) == 0) {
487 ASSERT_DETECTED_HANDLE(detected_medium, stored);
494 BOOST_REQUIRE_MESSAGE(compared_cnt == 2, "Detected malware count is invalid. "
495 "expected: == 2, cnt: " << compared_cnt);
500 BOOST_AUTO_TEST_CASE(get_detected_malwares_invalid_params)
502 EXCEPTION_GUARD_START
504 auto c = Test::Context<csr_cs_context_h>();
505 auto context = c.get();
506 csr_cs_malware_list_h detected_list;
509 const char *dirs[1] = {
513 ASSERT_IF(csr_cs_get_detected_malwares(nullptr, dirs,
514 sizeof(dirs) / sizeof(const char *),
515 &detected_list, &cnt),
516 CSR_ERROR_INVALID_HANDLE);
518 ASSERT_IF(csr_cs_get_detected_malwares(context, nullptr,
519 sizeof(dirs) / sizeof(const char *),
520 &detected_list, &cnt),
521 CSR_ERROR_INVALID_PARAMETER);
522 ASSERT_IF(csr_cs_get_detected_malwares(context, dirs,
523 sizeof(dirs) / sizeof(const char *),
525 CSR_ERROR_INVALID_PARAMETER);
526 ASSERT_IF(csr_cs_get_detected_malwares(context, dirs,
527 sizeof(dirs) / sizeof(const char *),
528 &detected_list, nullptr),
529 CSR_ERROR_INVALID_PARAMETER);
534 BOOST_AUTO_TEST_CASE(get_detected_malwares_not_existing_dir)
536 EXCEPTION_GUARD_START
538 auto c = Test::Context<csr_cs_context_h>();
539 auto context = c.get();
540 csr_cs_malware_list_h detected_list;
543 const char *dirs[1] = {
547 ASSERT_SUCCESS(csr_cs_get_detected_malwares(context, dirs,
548 sizeof(dirs) / sizeof(const char *),
549 &detected_list, &cnt));
551 ASSERT_IF(cnt, static_cast<size_t>(0));
556 BOOST_AUTO_TEST_CASE(get_ignored_malware)
558 EXCEPTION_GUARD_START
560 auto c = Test::Context<csr_cs_context_h>();
561 auto context = c.get();
562 csr_cs_malware_h detected, stored;
564 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_HIGH, &detected));
565 CHECK_IS_NOT_NULL(detected);
567 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_IGNORE));
569 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_HIGH, &stored));
571 CHECK_IS_NOT_NULL(stored);
573 ASSERT_DETECTED_HANDLE(detected, stored);
575 // rollback to unignore
576 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_UNIGNORE));
581 BOOST_AUTO_TEST_CASE(get_ignored_malware_invalid_param)
583 EXCEPTION_GUARD_START
585 auto c = Test::Context<csr_cs_context_h>();
586 auto context = c.get();
587 csr_cs_malware_h stored;
589 ASSERT_IF(csr_cs_get_ignored_malware(nullptr, TEST_FILE_MEDIUM, &stored),
590 CSR_ERROR_INVALID_HANDLE);
591 ASSERT_IF(csr_cs_get_ignored_malware(context, nullptr, &stored),
592 CSR_ERROR_INVALID_PARAMETER);
593 ASSERT_IF(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIUM, nullptr),
594 CSR_ERROR_INVALID_PARAMETER);
599 BOOST_AUTO_TEST_CASE(get_ignored_malware_not_existing_file)
601 EXCEPTION_GUARD_START
603 auto c = Test::Context<csr_cs_context_h>();
604 auto context = c.get();
605 csr_cs_malware_h stored;
607 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_NO_EXIST, &stored));
608 CHECK_IS_NULL(stored);
613 BOOST_AUTO_TEST_CASE(get_ignored_malwares)
615 EXCEPTION_GUARD_START
617 auto c = Test::Context<csr_cs_context_h>();
618 auto context = c.get();
619 csr_cs_malware_list_h ignored_list;
620 csr_cs_malware_h detected_high, detected_medium, stored;
623 size_t compared_cnt = 0;
624 Test::ScopedCstr file_path_actual;
626 const char *dirs[1] = {
630 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_HIGH, &detected_high));
631 CHECK_IS_NOT_NULL(detected_high);
632 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected_high,
633 CSR_CS_ACTION_IGNORE));
635 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIUM, &detected_medium));
636 CHECK_IS_NOT_NULL(detected_medium);
637 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected_medium,
638 CSR_CS_ACTION_IGNORE));
640 ASSERT_SUCCESS(csr_cs_get_ignored_malwares(context, dirs,
641 sizeof(dirs) / sizeof(const char *),
642 &ignored_list, &cnt));
643 CHECK_IS_NOT_NULL(ignored_list);
645 for (idx = 0; idx < cnt; idx++) {
646 ASSERT_SUCCESS(csr_cs_malware_list_get_malware(ignored_list, idx, &stored));
647 CHECK_IS_NOT_NULL(stored);
648 ASSERT_SUCCESS(csr_cs_malware_get_file_name(stored, &file_path_actual.ptr));
649 if (strcmp(TEST_FILE_HIGH, file_path_actual.ptr) == 0) {
650 ASSERT_DETECTED_HANDLE(detected_high, stored);
652 } else if (strcmp(TEST_FILE_MEDIUM, file_path_actual.ptr) == 0) {
653 ASSERT_DETECTED_HANDLE(detected_medium, stored);
660 ASSERT_IF(compared_cnt, static_cast<size_t>(2));
662 // rollback to unignore
663 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected_high,
664 CSR_CS_ACTION_UNIGNORE));
665 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected_medium,
666 CSR_CS_ACTION_UNIGNORE));
671 BOOST_AUTO_TEST_CASE(get_ignored_malwares_invalid_params)
673 EXCEPTION_GUARD_START
675 auto c = Test::Context<csr_cs_context_h>();
676 auto context = c.get();
677 csr_cs_malware_list_h ignored_list;
680 const char *dirs[1] = {
684 ASSERT_IF(csr_cs_get_ignored_malwares(nullptr, dirs,
685 sizeof(dirs) / sizeof(const char *),
686 &ignored_list, &cnt),
687 CSR_ERROR_INVALID_HANDLE);
688 ASSERT_IF(csr_cs_get_ignored_malwares(context, nullptr,
689 sizeof(dirs) / sizeof(const char *),
690 &ignored_list, &cnt),
691 CSR_ERROR_INVALID_PARAMETER);
692 ASSERT_IF(csr_cs_get_ignored_malwares(context, dirs,
693 sizeof(dirs) / sizeof(const char *),
695 CSR_ERROR_INVALID_PARAMETER);
696 ASSERT_IF(csr_cs_get_ignored_malwares(context, dirs,
697 sizeof(dirs) / sizeof(const char *),
698 &ignored_list, nullptr),
699 CSR_ERROR_INVALID_PARAMETER);
704 BOOST_AUTO_TEST_CASE(get_ignored_malwares_not_existing_dir)
706 EXCEPTION_GUARD_START
708 auto c = Test::Context<csr_cs_context_h>();
709 auto context = c.get();
710 csr_cs_malware_list_h ignored_list;
713 const char *dirs[1] = {
717 ASSERT_SUCCESS(csr_cs_get_ignored_malwares(context, dirs,
718 sizeof(dirs) / sizeof(const char *),
719 &ignored_list, &cnt));
721 ASSERT_IF(cnt, static_cast<size_t>(0));
726 BOOST_AUTO_TEST_CASE(judge_detected_malware)
728 EXCEPTION_GUARD_START
730 auto c = Test::Context<csr_cs_context_h>();
731 auto context = c.get();
732 csr_cs_malware_h detected, stored;
734 // remove earlier test results
735 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
736 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
737 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
738 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
740 // store detected malware
741 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
742 CHECK_IS_NOT_NULL(detected);
744 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
745 CHECK_IS_NOT_NULL(stored);
747 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
748 CHECK_IS_NULL(stored);
751 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_IGNORE));
753 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
754 CHECK_IS_NULL(stored);
756 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
757 CHECK_IS_NOT_NULL(stored);
760 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_UNIGNORE));
762 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
763 CHECK_IS_NOT_NULL(stored);
765 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
766 CHECK_IS_NULL(stored);
769 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
771 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
772 CHECK_IS_NULL(stored);
774 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
775 CHECK_IS_NULL(stored);
780 BOOST_AUTO_TEST_CASE(judge_detected_malware_after_changed_file)
782 EXCEPTION_GUARD_START
784 auto c = Test::Context<csr_cs_context_h>();
785 auto context = c.get();
786 csr_cs_malware_h detected;
788 // scan and judge after touch
789 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
790 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
791 CHECK_IS_NOT_NULL(detected);
793 std::this_thread::sleep_for(std::chrono::seconds(1));
795 Test::touch_file(TEST_FILE_MEDIA);
797 std::this_thread::sleep_for(std::chrono::seconds(1));
799 ASSERT_IF(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE),
800 CSR_ERROR_FILE_CHANGED);
802 // rescan and judge again without touch
803 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
804 CHECK_IS_NOT_NULL(detected);
805 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
810 BOOST_AUTO_TEST_CASE(judge_detected_malware_ignored_rescan)
812 EXCEPTION_GUARD_START
814 auto c = Test::Context<csr_cs_context_h>();
815 auto context = c.get();
816 csr_cs_malware_h detected, stored;
818 // remove earlier test results
819 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
820 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
821 csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE);
822 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
824 // store detected malware
825 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
826 CHECK_IS_NOT_NULL(detected);
829 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_IGNORE));
832 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
833 CHECK_IS_NULL(detected);
835 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
836 CHECK_IS_NULL(stored);
838 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
839 CHECK_IS_NOT_NULL(stored);
841 // rollback to unignore
842 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, stored, CSR_CS_ACTION_UNIGNORE));
847 BOOST_AUTO_TEST_CASE(judge_detected_malware_remove_file)
849 EXCEPTION_GUARD_START
851 auto c = Test::Context<csr_cs_context_h>();
852 auto context = c.get();
853 csr_cs_malware_h detected, stored;
855 // remove earlier test results
856 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
857 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
858 csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE);
859 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
861 // store detected malware
862 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
863 CHECK_IS_NOT_NULL(detected);
865 // remove detected malware file
866 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
868 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
869 CHECK_IS_NULL(stored);
871 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
872 CHECK_IS_NULL(stored);
874 ASSERT_IF(Test::is_file_exist(TEST_FILE_MEDIA), false);
877 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
878 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
879 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_IGNORE));
881 // remove ignored malware file
882 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
884 ASSERT_SUCCESS(csr_cs_get_detected_malware(context, TEST_FILE_MEDIA, &stored));
885 CHECK_IS_NULL(stored);
887 ASSERT_SUCCESS(csr_cs_get_ignored_malware(context, TEST_FILE_MEDIA, &stored));
888 CHECK_IS_NULL(stored);
890 ASSERT_IF(Test::is_file_exist(TEST_FILE_MEDIA), false);
892 // remove not existing file
893 Test::copy_file(TEST_FILE_HIGH, TEST_FILE_MEDIA);
894 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_MEDIA, &detected));
895 CHECK_IS_NOT_NULL(detected);
897 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
899 ASSERT_IF(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE),
900 CSR_ERROR_FILE_DO_NOT_EXIST);
905 BOOST_AUTO_TEST_CASE(judge_detected_malware_remove_wgt)
907 EXCEPTION_GUARD_START
909 auto c = Test::Context<csr_cs_context_h>();
910 auto context = c.get();
911 csr_cs_malware_h detected;
913 // remove old test data
914 Test::uninstall_app(TEST_WGT_PKG_ID);
916 ASSERT_INSTALL_APP(TEST_WGT_PATH, TEST_WGT_TYPE);
918 // remove detected malware file
919 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_WGT_MAL_FILE, &detected));
920 CHECK_IS_NOT_NULL(detected);
922 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
927 BOOST_AUTO_TEST_CASE(judge_detected_malware_remove_tpk)
929 EXCEPTION_GUARD_START
931 auto c = Test::Context<csr_cs_context_h>();
932 auto context = c.get();
933 csr_cs_malware_h detected;
935 // remove old test data
936 Test::uninstall_app(TEST_TPK_PKG_ID);
937 ASSERT_INSTALL_APP(TEST_TPK_PATH, TEST_TPK_TYPE);
939 // remove detected malware file
940 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_TPK_MAL_FILE, &detected));
941 CHECK_IS_NOT_NULL(detected);
943 ASSERT_SUCCESS(csr_cs_judge_detected_malware(context, detected, CSR_CS_ACTION_REMOVE));
948 BOOST_AUTO_TEST_CASE(judge_detected_malware_invalid_params)
950 EXCEPTION_GUARD_START
952 auto c = Test::Context<csr_cs_context_h>();
953 auto context = c.get();
954 csr_cs_malware_h detected;
956 ASSERT_SUCCESS(csr_cs_scan_file(context, TEST_FILE_HIGH, &detected));
957 CHECK_IS_NOT_NULL(detected);
959 ASSERT_IF(csr_cs_judge_detected_malware(nullptr, detected, CSR_CS_ACTION_REMOVE),
960 CSR_ERROR_INVALID_HANDLE);
961 ASSERT_IF(csr_cs_judge_detected_malware(context, nullptr, CSR_CS_ACTION_REMOVE),
962 CSR_ERROR_INVALID_PARAMETER);
963 ASSERT_IF(csr_cs_judge_detected_malware(context, detected,
964 static_cast<csr_cs_action_e>(-1)),
965 CSR_ERROR_INVALID_PARAMETER);
970 BOOST_AUTO_TEST_SUITE_END()