#define GLOBAL_USER tzplatform_getuid(TZ_SYS_GLOBALAPP_USER)
#endif
-#define DB_VERSION_PATH SYSCONFDIR "/package-manager/pkg_db_version.txt"
-
namespace pkgmgr_server {
namespace database {
return PMINFO_R_OK;
}
-int CreateDBHandler::SetDBVersion(sqlite3* conn) {
- static const char query_raw[] = "PRAGMA user_version=%Q";
- int ret;
- FILE *fp = NULL;
- char version[PKG_STRING_LEN_MAX] = { 0 };
- char *query = NULL;
-
- fp = fopen(DB_VERSION_PATH, "r");
- if (fp == NULL) {
- printf("Failed to open db version file %s\n", DB_VERSION_PATH);
- printf("errno : %d\n", errno);
- LOGE("Failed to open db version file");
- return -1;
- }
-
- if (fgets(version, sizeof(version), fp) == NULL) {
- LOGE("Failed to get version information");
- fclose(fp);
- return -1;
- }
- fclose(fp);
-
- query = sqlite3_mprintf(query_raw, version);
- if (!query) {
- LOGE("Out of memory");
- return -1;
- }
-
- ret = sqlite3_exec(conn, query, NULL, NULL, NULL);
- if (ret != SQLITE_OK) {
- LOGE("exec failed: %s", sqlite3_errmsg(conn));
- sqlite3_free(query);
- return -1;
- }
- sqlite3_free(query);
-
- return 0;
-}
-
int CreateDBHandler::CreateParserDB() {
SetDBType(pkgmgr_common::DBType::DB_TYPE_FILE_PKGDB);
ClearDBHandle();
sqlite3* conn = conn_list.front().first;
uid_t uid = conn_list.front().second;
- if (SetDBVersion(conn) < 0)
- return PMINFO_R_ERROR;
-
return pkgmgr_parser_internal_initialize_db(conn, uid);
}
sqlite3* conn = conn_list.front().first;
uid_t uid = conn_list.front().second;
- if (SetDBVersion(conn) < 0)
- return PMINFO_R_ERROR;
-
return pkgmgr_parser_internal_initialize_db(conn, uid);
}
std::vector<std::vector<std::string>> GetResult();
int CreateParserDB();
int CreateCertDB();
- virtual int SetDBVersion(sqlite3* conn);
private:
std::vector<std::vector<std::string>> result_;
_LOGD("chsmack -a %s %s", DB_LABEL, x); \
} while (0)
+#define DB_VERSION_PATH SYSCONFDIR "/package-manager/pkg_db_version.txt"
+
static const char *__get_cert_db_path(void)
{
return tzplatform_mkpath(TZ_SYS_DB, ".pkgmgr_cert.db");
return 0;
}
+static int __set_db_version(sqlite3 *db) {
+ static const char query_raw[] = "PRAGMA user_version=%Q";
+ int ret;
+ FILE *fp = NULL;
+ char version[PKG_STRING_LEN_MAX] = { 0 };
+ char *query = NULL;
+
+ fp = fopen(DB_VERSION_PATH, "r");
+ if (fp == NULL) {
+ _LOGE("Failed to open db version file");
+ return -1;
+ }
+
+ if (fgets(version, sizeof(version), fp) == NULL) {
+ _LOGE("Failed to get version information");
+ fclose(fp);
+ return -1;
+ }
+ fclose(fp);
+
+ query = sqlite3_mprintf(query_raw, version);
+ if (!query) {
+ _LOGE("Out of memory");
+ return -1;
+ }
+
+ ret = sqlite3_exec(db, query, NULL, NULL, NULL);
+ if (ret != SQLITE_OK) {
+ _LOGE("exec failed: %s", sqlite3_errmsg(db));
+ sqlite3_free(query);
+ return -1;
+ }
+ sqlite3_free(query);
+
+ return 0;
+}
+
static int __create_tables(sqlite3 *db, const char **queries)
{
int ret;
{
const char **queries;
+ if (__set_db_version(db))
+ return -1;
+
if (strstr(dbpath, ".pkgmgr_parser.db")) {
queries = PARSER_INIT_QUERIES;
} else if (strstr(dbpath, ".pkgmgr_cert.db")) {
-AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/ UNIT_TESTS_SRCS)
-
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}/../../src/
${CMAKE_CURRENT_SOURCE_DIR}/../../parser/
)
+FILE(GLOB_RECURSE UNIT_TESTS_SRCS *.cc *.c)
+FILE(GLOB_RECURSE SERVER_SRCS ${CMAKE_SOURCE_DIR}/src/server/*.cc ${CMAKE_SOURCE_DIR}/src/server/*.c)
+LIST(FILTER SERVER_SRCS EXCLUDE REGEX main.cc)
+
ADD_EXECUTABLE(${TARGET_PKGMGR_INFO_UNIT_TEST}
${UNIT_TESTS_SRCS}
+ ${SERVER_SRCS}
)
+ADD_DEFINITIONS("-DSYSCONFDIR=\"${SYSCONFDIR}\"")
+
include(FindPkgConfig)
pkg_check_modules(unit_test_pkgs REQUIRED dlog glib-2.0 gio-2.0 sqlite3 gmock parcel)
TARGET_LINK_LIBRARIES(${TARGET_PKGMGR_INFO_UNIT_TEST} ${libpkgs_LDFLAGS})
TARGET_LINK_LIBRARIES(${TARGET_PKGMGR_INFO_UNIT_TEST} ${libpkgmgr-parser_LDFLAGS})
TARGET_LINK_LIBRARIES(${TARGET_PKGMGR_INFO_UNIT_TEST} PUBLIC pkgmgr-info)
-TARGET_LINK_LIBRARIES(${TARGET_PKGMGR_INFO_UNIT_TEST} PUBLIC pkgmgr-info-server)
SET_TARGET_PROPERTIES(${TARGET_PKGMGR_INFO_UNIT_TEST} PROPERTIES COMPILE_FLAGS ${CFLAGS} "-fPIE -fpic")
SET_TARGET_PROPERTIES(${TARGET_PKGMGR_INFO_UNIT_TEST} PROPERTIES LINK_FLAGS "-pie")
set_target_properties(${TARGET_PKGMGR_INFO_UNIT_TEST} PROPERTIES COMPILE_FLAGS "${unit_test_pkgs_CFLAGS_str}")
target_link_libraries(${TARGET_PKGMGR_INFO_UNIT_TEST} ${unit_test_pkgs_LDFLAGS})
+SET_TARGET_PROPERTIES(${TARGET_PKGMGR_INFO_UNIT_TEST} PROPERTIES
+ LINK_FLAGS "-Wl,\
+--wrap=malloc,\
+--wrap=fopen,\
+--wrap=fopen64,\
+--wrap=fgets,\
+--wrap=fclose")
+
ADD_TEST(
NAME ${TARGET_PKGMGR_INFO_UNIT_TEST}
COMMAND ${TARGET_PKGMGR_INFO_UNIT_TEST}
--- /dev/null
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * 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.
+ */
+
+#include "file_mock.h"
+
+#include <stdio.h>
+#include <stdbool.h>
+
+extern FILE *__real_fopen(const char *filename, const char *modes);
+extern FILE *__real_fopen64(const char *filename, const char *modes);
+extern char *__real_fgets(char *s, int n, FILE * stream);
+extern int __real_fclose(FILE *stream);
+
+static bool flag_ = false;
+
+void fopen_mock_setup(bool flag) {
+ flag_ = flag;
+}
+
+FILE* __wrap_fopen(const char *filename, const char *modes) {
+ if (!flag_)
+ return __real_fopen(filename, modes);
+
+ return (FILE *)1;
+}
+
+FILE* __wrap_fopen64(const char *filename, const char *modes) {
+ if (!flag_)
+ return __real_fopen64(filename, modes);
+
+ return (FILE *)1;
+}
+
+char * __wrap_fgets(char *s, int n, FILE *stream) {
+ if (!flag_)
+ return __real_fgets(s, n, stream);
+
+ char buf[1024] = "30005";
+ printf("wrap_fopen called\n");
+ snprintf(s, n, "%s", buf);
+
+ return s;
+}
+
+int __wrap_fclose(FILE *stream) {
+ if (!flag_)
+ return __real_fclose(stream);
+
+ return 0;
+}
--- /dev/null
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * 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.
+ */
+
+#ifndef __MOCK_FILE_MOCK_H__
+#define __MOCK_FILE_MOCK_H__
+
+#include <stdbool.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void fopen_mock_setup(bool flag);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MOCK_FILE_MOCK_H__ */
#include "parcel_utils.hh"
#include "pkg_get_db_handler.hh"
#include "pkg_set_db_handler.hh"
+#include "mock/file_mock.h"
#include "pkgmgr-info.h"
#include "pkgmgrinfo_basic.h"
MOCK_METHOD0(Connect, bool());
MOCK_METHOD0(GetConnection, std::vector<std::pair<sqlite3*, uid_t>>());
- MOCK_METHOD1(SetDBVersion, int(sqlite3 *conn));
};
class PkgSetDBHandlerMock : public pkgmgr_server::database::PkgSetDBHandler {
.Times(2).WillRepeatedly(testing::Return(true));
EXPECT_CALL(create_db_handler, GetConnection())
.Times(2).WillRepeatedly(testing::Return(GetDBHandles()));
- EXPECT_CALL(create_db_handler, SetDBVersion(testing::_))
- .Times(2).WillRepeatedly(testing::Return(0));
+ fopen_mock_setup(true);
ASSERT_EQ(create_db_handler.Execute(), 0);
+ fopen_mock_setup(false);
}
virtual void TearDown() {