summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt4
-rw-r--r--packaging/cert-checker.spec1
-rw-r--r--src/certs.cpp2
-rw-r--r--src/include/cchecker/logic.h6
-rw-r--r--src/logic.cpp21
-rw-r--r--tests/CMakeLists.txt26
-rw-r--r--tests/logic_.cpp19
-rw-r--r--tests/logic_.h1
-rw-r--r--tests/stubs_.cpp130
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