diff options
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | packaging/cert-checker.spec | 1 | ||||
-rw-r--r-- | src/certs.cpp | 2 | ||||
-rw-r--r-- | src/include/cchecker/logic.h | 6 | ||||
-rw-r--r-- | src/logic.cpp | 21 | ||||
-rw-r--r-- | tests/CMakeLists.txt | 26 | ||||
-rw-r--r-- | tests/logic_.cpp | 19 | ||||
-rw-r--r-- | tests/logic_.h | 1 | ||||
-rw-r--r-- | tests/stubs_.cpp | 130 |
9 files changed, 203 insertions, 7 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index a9bdc62..6cbbc23 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,8 +55,12 @@ IF (CMAKE_BUILD_TYPE MATCHES "DEBUG") ADD_DEFINITIONS("-DBUILD_TYPE_DEBUG") ENDIF (CMAKE_BUILD_TYPE MATCHES "DEBUG") +# Enable popup +ADD_DEFINITIONS("-DPOPUP=1") + SET(TARGET_CERT_CHECKER "cert-checker") SET(TARGET_CERT_CHECKER_TESTS "cert-checker-tests") +SET(TARGET_CERT_CHECKER_TESTS_LOGIC "cert-checker-tests-logic") SET(TARGET_CERT_CHECKER_POPUP_TEST "cert-checker-popup-test") ADD_SUBDIRECTORY(src) diff --git a/packaging/cert-checker.spec b/packaging/cert-checker.spec index 325f54a..093401c 100644 --- a/packaging/cert-checker.spec +++ b/packaging/cert-checker.spec @@ -104,6 +104,7 @@ fi %files -n cert-checker-tests %defattr(-,root,root,-) %{_bindir}/cert-checker-tests +%{_bindir}/cert-checker-tests-logic %{_bindir}/cert-checker-popup-test %{TZ_SYS_DB}/.cert-checker-test.db /root/cert-checker-test/*/*.xml diff --git a/src/certs.cpp b/src/certs.cpp index d2d44e0..a4968d9 100644 --- a/src/certs.cpp +++ b/src/certs.cpp @@ -204,6 +204,8 @@ Certs::ocsp_response_t Certs::check_ocsp_chain (const chain_t &chain) // Add handling for different errors codes // For these we can try to check ocsp again later: switch (ret) { + case CKM_API_ERROR_NOT_SUPPORTED: + LogDebug("Key-manager OCSP API temporary diabled."); case CKM_API_ERROR_SOCKET: case CKM_API_ERROR_BAD_REQUEST: case CKM_API_ERROR_BAD_RESPONSE: diff --git a/src/include/cchecker/logic.h b/src/include/cchecker/logic.h index b5f1c22..6700333 100644 --- a/src/include/cchecker/logic.h +++ b/src/include/cchecker/logic.h @@ -58,7 +58,9 @@ class Logic { public: Logic(void); virtual ~Logic(void); - error_t setup(); + error_t setup(void); + virtual void clean(void); + static void pkgmgr_install_callback(GDBusProxy *proxy, gchar *sender_name, gchar *signal_name, @@ -76,7 +78,7 @@ class Logic { void *logic_ptr); - private: + protected: error_t setup_db(); void load_database_to_buffer(); diff --git a/src/logic.cpp b/src/logic.cpp index da1599c..170f566 100644 --- a/src/logic.cpp +++ b/src/logic.cpp @@ -30,9 +30,6 @@ using namespace std; -// FIXME: Popup temporary disabled -#define POPUP 0 - namespace CCHECKER { namespace { @@ -41,6 +38,11 @@ const char *const DB_PATH = tzplatform_mkpath(TZ_SYS_DB, ".cert-checker.db"); Logic::~Logic(void) { + clean(); +} + +void Logic::clean(void) +{ LogDebug("Cert-checker cleaning."); // wait and join processing thread @@ -519,6 +521,19 @@ void Logic::add_app_to_buffer_and_database(const app_t &app) // We can do nothing about it. We can only log the error. } + // Then add app to buffer - skip if already added. + // FIXME: What to do if the same app will be installed twice? + // Add it twice to the buffer, or check if apps in buffer are unique? + // At the moment doubled apps are skipped. + for (auto &iter : m_buffer) { + if (iter.app_id == app.app_id && + iter.pkg_id == app.pkg_id && + iter.uid == app.uid) { + LogDebug(app.str() << " already in buffer. Skip."); + return; + } + } + // Then add app to buffer m_buffer.push_back(app); } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 62800da..ef836cd 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -54,6 +54,23 @@ SET(CERT_CHECKER_TESTS_SOURCES ${CERT_CHECKER_SRC_PATH}/db/sql_query.cpp ) +SET(CERT_CHECKER_TESTS_LOGIC_SOURCES + # tests + ${CERT_CHECKER_TESTS_SRC_PATH}/main.cpp + ${CERT_CHECKER_TESTS_SRC_PATH}/colour_log_formatter.cpp + ${CERT_CHECKER_TESTS_SRC_PATH}/test_logic.cpp + ${CERT_CHECKER_TESTS_SRC_PATH}/logic_.cpp + ${CERT_CHECKER_TESTS_SRC_PATH}/stubs_.cpp + # cert-checker + ${CERT_CHECKER_SRC_PATH}/logic.cpp + ${CERT_CHECKER_SRC_PATH}/app.cpp + ${CERT_CHECKER_SRC_PATH}/queue.cpp + # logs + ${CERT_CHECKER_SRC_PATH}/log/log.cpp + # dpl + ${CERT_CHECKER_SRC_PATH}/dpl/core/src/colors.cpp +) + SET(CERT_CHECKER_POPUP_TEST_SOURCES # tests ${CERT_CHECKER_TESTS_SRC_PATH}/popup_test.cpp @@ -73,6 +90,7 @@ INCLUDE_DIRECTORIES(SYSTEM ) ADD_EXECUTABLE(${TARGET_CERT_CHECKER_TESTS} ${CERT_CHECKER_TESTS_SOURCES}) +ADD_EXECUTABLE(${TARGET_CERT_CHECKER_TESTS_LOGIC} ${CERT_CHECKER_TESTS_LOGIC_SOURCES}) ADD_EXECUTABLE(${TARGET_CERT_CHECKER_POPUP_TEST} ${CERT_CHECKER_POPUP_TEST_SOURCES}) TARGET_LINK_LIBRARIES(${TARGET_CERT_CHECKER_TESTS} @@ -82,6 +100,13 @@ TARGET_LINK_LIBRARIES(${TARGET_CERT_CHECKER_TESTS} -ldl ) +TARGET_LINK_LIBRARIES(${TARGET_CERT_CHECKER_TESTS_LOGIC} + ${CERT_CHECKER_TESTS_DEP_LIBRARIES} + ${CMAKE_THREAD_LIBS_INIT} + boost_unit_test_framework + -ldl + ) + TARGET_LINK_LIBRARIES(${TARGET_CERT_CHECKER_POPUP_TEST} ${CERT_CHECKER_TESTS_DEP_LIBRARIES} -ldl @@ -104,4 +129,5 @@ INSTALL(FILES DESTINATION ${TEST_APP_SIGNATURES_DIR}/app4/) INSTALL(TARGETS ${TARGET_CERT_CHECKER_TESTS} DESTINATION ${BINDIR}) +INSTALL(TARGETS ${TARGET_CERT_CHECKER_TESTS_LOGIC} DESTINATION ${BINDIR}) INSTALL(TARGETS ${TARGET_CERT_CHECKER_POPUP_TEST} DESTINATION ${BINDIR}) diff --git a/tests/logic_.cpp b/tests/logic_.cpp index 17dc0bb..0259bd6 100644 --- a/tests/logic_.cpp +++ b/tests/logic_.cpp @@ -44,8 +44,23 @@ Logic_::~Logic_(void) { clean(); } - -// For tests only +void Logic_::clean(void) +{ + LogDebug("Cert-checker cleaning."); + + // wait and join processing thread + if (m_thread.joinable()) { + LogDebug("Waiting for join processing thread"); + { + std::lock_guard < std::mutex > lock(m_mutex_cv); + set_should_exit(); + m_to_process.notify_one(); + } + m_thread.join(); + LogDebug("Processing thread joined"); + } else + LogDebug("No thread to join"); +} void Logic_::connman_callback_manual_(bool state) { diff --git a/tests/logic_.h b/tests/logic_.h index 29f0e37..45ed559 100644 --- a/tests/logic_.h +++ b/tests/logic_.h @@ -36,6 +36,7 @@ class Logic_ : public Logic { public: Logic_(void); virtual ~Logic_(void); + virtual void clean(void); // For tests only void connman_callback_manual_(bool state); diff --git a/tests/stubs_.cpp b/tests/stubs_.cpp new file mode 100644 index 0000000..b475690 --- /dev/null +++ b/tests/stubs_.cpp @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved + * + * 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. + */ +/* + * @file stubs_.cpp + * @author Janusz Kozerski (j.kozerski@samsung.com) + * @version 1.0 + * @brief Implementation of stubbed functions for testing + */ + +#include <cchecker/certs.h> +#include <cchecker/queue.h> +#include <cchecker/sql_query.h> +#include <cchecker/UIBackend.h> + +namespace CCHECKER { + +// Certs + +Certs::Certs() +{} + +Certs::~Certs() +{} + +void Certs::get_certificates (app_t &app, ocsp_urls_t &ocsp_urls) +{ + (void)app; + (void)ocsp_urls; +} + +// Only the public functions need to be stubbed for testing all possibilities +Certs::ocsp_response_t Certs::check_ocsp (const app_t &app) +{ + if (app.signatures.empty()) + return ocsp_response_t::OCSP_APP_OK; + + if (app.signatures.front().empty()) + return ocsp_response_t::OCSP_APP_OK; + + std::string ret = app.signatures.front().front(); + + if ("OCSP_APP_REVOKED" == ret) + return ocsp_response_t::OCSP_APP_REVOKED; + if ("OCSP_CHECK_AGAIN" == ret) + return ocsp_response_t::OCSP_CHECK_AGAIN; + if ("OCSP_CERT_ERROR" == ret) + return ocsp_response_t::OCSP_CERT_ERROR; + + return ocsp_response_t::OCSP_APP_OK; +} + +// DB +DB::SqlQuery::SqlQuery(const std::string &path) +{ + m_connection = NULL; + m_inUserTransaction = false; + + (void)path; +} + +DB::SqlQuery::~SqlQuery() +{} + +bool DB::SqlQuery::get_url(const std::string &issuer, std::string &url) +{ + (void)issuer; + (void)url; + return false; +} + +void DB::SqlQuery::set_url(const std::string &issuer, const std::string &url, const int64_t &date) +{ + (void)issuer; + (void)url; + (void)date; +} + +bool DB::SqlQuery::add_app_to_check_list(const app_t &app) +{ + (void)app; + return true; // Success +} + +void DB::SqlQuery::remove_app_from_check_list(const app_t &app) +{ + (void)app; +} + +void DB::SqlQuery::mark_as_verified(const app_t &app, const app_t::verified_t &verified) +{ + (void)app; + (void)verified; +} + +void DB::SqlQuery::get_app_list(std::list<app_t> &apps_buffer) +{ + (void)apps_buffer; +} + +// UI +UI::UIBackend::UIBackend(int timeout) : + m_notification(nullptr), + m_responseTimeout(timeout) +{} + +UI::UIBackend::~UIBackend() +{} + +bool UI::UIBackend::call_popup(const app_t &app) +{ + if (app.uid > 5000) + return true; + + return false; +} + +} //CCHECKER |