From 1f86b03890aa7234564bb09c8e12ab42f785fb10 Mon Sep 17 00:00:00 2001 From: Jihoon Jung Date: Thu, 28 May 2020 08:26:01 +0900 Subject: [PATCH] Add unittest for auto coverage Change-Id: Ifd256d2ee3ad0b0b4ccfedc36654f1e037dcd938 Signed-off-by: Jihoon Jung --- CMakeLists.txt | 4 +- packaging/capi-network-smartcard.spec | 12 + unittest/CMakeLists.txt | 48 ++++ unittest/include/assert_local.h | 118 +++++++++ unittest/include/tct_common.h | 218 +++++++++++++++++ unittest/include/testcase.h | 40 +++ unittest/mock/smartcard-mock.c | 321 +++++++++++++++++++++++++ unittest/run_coverage.sh | 35 +++ unittest/tct-smartcard-core.cpp | 108 +++++++++ unittest/tct-smartcard-core_mobile.h | 110 +++++++++ unittest/tct-smartcard-core_tizeniot.h | 110 +++++++++ unittest/tct-smartcard-core_wearable.h | 110 +++++++++ unittest/utc-smartcard-channel.c | 192 +++++++++++++++ unittest/utc-smartcard-reader.c | 257 ++++++++++++++++++++ unittest/utc-smartcard-service.c | 176 ++++++++++++++ unittest/utc-smartcard-session.c | 279 +++++++++++++++++++++ unittest/utc-smartcard.c | 39 +++ unittest/utc-smartcard.h | 40 +++ 18 files changed, 2216 insertions(+), 1 deletion(-) create mode 100644 unittest/CMakeLists.txt create mode 100755 unittest/include/assert_local.h create mode 100755 unittest/include/tct_common.h create mode 100755 unittest/include/testcase.h create mode 100755 unittest/mock/smartcard-mock.c create mode 100755 unittest/run_coverage.sh create mode 100755 unittest/tct-smartcard-core.cpp create mode 100755 unittest/tct-smartcard-core_mobile.h create mode 100755 unittest/tct-smartcard-core_tizeniot.h create mode 100755 unittest/tct-smartcard-core_wearable.h create mode 100755 unittest/utc-smartcard-channel.c create mode 100755 unittest/utc-smartcard-reader.c create mode 100755 unittest/utc-smartcard-service.c create mode 100755 unittest/utc-smartcard-session.c create mode 100755 unittest/utc-smartcard.c create mode 100755 unittest/utc-smartcard.h diff --git a/CMakeLists.txt b/CMakeLists.txt index e056d1e..7c86e57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -83,4 +83,6 @@ CONFIGURE_FILE( INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/${fw_name}.pc DESTINATION ${LIBDIR}/pkgconfig) ADD_SUBDIRECTORY(test) - +IF(BUILD_GCOV) + ADD_SUBDIRECTORY(unittest) +ENDIF(BUILD_GCOV) diff --git a/packaging/capi-network-smartcard.spec b/packaging/capi-network-smartcard.spec index e9c7557..f0806a4 100644 --- a/packaging/capi-network-smartcard.spec +++ b/packaging/capi-network-smartcard.spec @@ -13,6 +13,11 @@ BuildRequires: pkgconfig(smartcard-service-common) BuildRequires: pkgconfig(capi-base-common) BuildRequires: pkgconfig(capi-system-info) +%if 0%{?gcov:1} +BuildRequires: gtest-devel +BuildRequires: lcov +%endif + Requires(post): /sbin/ldconfig Requires(postun): /sbin/ldconfig @@ -68,6 +73,13 @@ mkdir -p %{buildroot}%{_datadir}/gcov/obj install -m 0644 gcov-obj/* %{buildroot}%{_datadir}/gcov/obj %endif +%check +%if 0%{?gcov:1} +pushd unittest +./run_coverage.sh +popd +%endif + %post -p /sbin/ldconfig %postun -p /sbin/ldconfig diff --git a/unittest/CMakeLists.txt b/unittest/CMakeLists.txt new file mode 100644 index 0000000..f3409c2 --- /dev/null +++ b/unittest/CMakeLists.txt @@ -0,0 +1,48 @@ +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--rpath=/usr/lib") + +SET(UNITTEST_NAME "tct-smartcard-core") + +SET(CAPI_LIB "capi-network-smartcard") +SET(TC_SOURCES + utc-smartcard-channel.c + utc-smartcard-reader.c + utc-smartcard-service.c + utc-smartcard-session.c + utc-smartcard.c +) + +PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED + capi-base-common + dlog + capi-system-info + glib-2.0 + gio-unix-2.0 +) + +INCLUDE_DIRECTORIES( + ${${CAPI_LIB}_INCLUDE_DIRS} + ${CMAKE_SOURCE_DIR}/src/include + ${CMAKE_CURRENT_SOURCE_DIR}/include +) + +ADD_DEFINITIONS( -DMOBILE ) + +SET(SMARTCARD_MOCK "smartcard-mock") +SET(SMARTCARD_MOCK_SRCS + mock/smartcard-mock.c) +SET(SMARTCARD_MOCK_CFLAGS "${CMAKE_C_FLAGS}" ) +ADD_LIBRARY(${SMARTCARD_MOCK} SHARED ${SMARTCARD_MOCK_SRCS}) +SET_TARGET_PROPERTIES(${SMARTCARD_MOCK} PROPERTIES + COMPILE_FLAGS ${SMARTCARD_MOCK_CFLAGS} +) + +ADD_EXECUTABLE(${UNITTEST_NAME} ${UNITTEST_NAME}.cpp ${TC_SOURCES} ) +TARGET_LINK_LIBRARIES(${UNITTEST_NAME} + ${${CAPI_LIB}_LIBRARIES} + ${LIB_NAME} + gtest + pthread + capi-network-smartcard +) + +# INSTALL(PROGRAMS ${UNITTEST_NAME} DESTINATION ${BIN_INSTALL_DIR}) diff --git a/unittest/include/assert_local.h b/unittest/include/assert_local.h new file mode 100755 index 0000000..7c88a02 --- /dev/null +++ b/unittest/include/assert_local.h @@ -0,0 +1,118 @@ +// +// Copyright (c) 2020 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 _ASSERT_H_ +#define _ASSERT_H_ +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define assert(exp) \ + do { \ + if (!(exp)) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert Fail; Following expression is not true: %s\n", \ + __FILE__, __LINE__, #exp); \ + return 1; \ + } \ + } while (0) + +#define assert_eq(var, ref) \ + do { \ + if (var != ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) and (%s == 0x%x) are not equal\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return 1; \ + } \ + } while (0) + +#define assert_eq_no_return(var, ref) \ + do { \ + if (var != ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) and (%s == 0x%x) are not equal\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return ; \ + } \ + } while (0) + +#define assert_neq_no_return(var, ref) \ + do { \ + if (var == ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) and (%s == 0x%x) are equal\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return ; \ + } \ + } while (0) + +#define assert_neq(var, ref) \ + do { \ + if (var == ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) and (%s == 0x%x) are equal\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return 1; \ + } \ + } while (0) + +#define assert_gt(var, ref) \ + do { \ + if (var <= ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) is not greater than (%s == 0x%x)\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return 1; \ + } \ + } while (0) + +#define assert_geq(var, ref) \ + do { \ + if (var < ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) is not greater than or equal to (%s == 0x%x)\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return 1; \ + } \ + } while (0) + +#define assert_lt(var, ref) \ + do { \ + if (var >= ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) is not lower than (%s == 0x%x)\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return 1; \ + } \ + } while (0) + +#define assert_leq(var, ref) \ + do { \ + if (var > ref) { \ + fprintf(stderr, \ + "\n[TCT][%s][Line : %d] Assert fail; Values (%s == 0x%x) is not lower than or equal to (%s == 0x%x)\n", \ + __FILE__, __LINE__, #var, (int)var, #ref, (int)ref); \ + return 1; \ + } \ + } while (0) + +#ifdef __cplusplus +} +#endif +#endif // _ASSERT_H_ diff --git a/unittest/include/tct_common.h b/unittest/include/tct_common.h new file mode 100755 index 0000000..ebe9193 --- /dev/null +++ b/unittest/include/tct_common.h @@ -0,0 +1,218 @@ +// +// Copyright (c) 2020 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 _TCT_COMMON_H_ +#define _TCT_COMMON_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "assert_local.h" + +#include +#include +#include +#include +#include +#include +#include + +#define CONFIG_LINE_LEN_MAX 2048 +#define CONFIG_VALUE_LEN_MAX 1024 + +#define UTC_LOG "utc.log" +#define ERR_UTC_LOG "utc_error.log" +#define TC_RESULT "tc_result.log" + +FILE *g_fpLog; +FILE *g_fpLogDump; +int g_Serr; + +int old_Serr; + +#define FPRINTF(...) {\ + g_fpLog = fopen(ERR_LOG, "a");\ + fprintf(g_fpLog, __VA_ARGS__);\ + fclose(g_fpLog);\ +} + +#define DUMP_UTC_ERRLOG() {\ + g_Serr = dup(fileno(stderr));\ + g_fpLogDump = freopen(ERR_UTC_LOG, "w", stderr);\ + fflush(stderr);\ +} + +#define CLOSE_UTC_ERRLOG() {\ + if(g_fpLogDump) \ + {\ + if (g_Serr != -1)\ + {\ + old_Serr = fileno(stderr);\ + if(old_Serr != -1)\ + {\ + dup2(g_Serr, old_Serr);\ + }\ + close(g_Serr);\ + }\ + fclose(g_fpLogDump);\ + }\ +} + +#define PRINT_TC_RESULT(...) {\ + g_fpLog = fopen(TC_RESULT, "w");\ + fprintf(g_fpLog, __VA_ARGS__);\ + fclose(g_fpLog);\ +} + + +#define FREE_MEMORY_TC(buffer) {\ + if ( buffer != NULL )\ +{\ + free(buffer);\ + buffer = NULL;\ +}\ +} + + +#define IS_FEATURE_SUPPORTED(feature_name, featureFlag, ModuleName)\ +{\ + if ( !(TCTCheckSystemInfoFeatureSupported(feature_name, ModuleName)) )\ +{\ + featureFlag = false;\ +}\ + else\ +{\ + featureFlag = true;\ +}\ +} + +#define PRINT_RESULT(eCompare, eRetVal, API, Error) {\ + if ( eRetVal == eCompare )\ +{\ + if ( DEBUG )\ +{\ + FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\ +}\ +}\ + else \ +{\ + FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\ + return 1;\ +}\ +} + +#define PRINT_RESULT_NORETURN(eCompare, eRetVal, API, Error) {\ + if ( eRetVal == eCompare )\ +{\ + if ( DEBUG )\ +{\ + FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\ +}\ +}\ + else \ +{\ + FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\ +}\ +} + +#define PRINT_RESULT_CLEANUP(eCompare, eRetVal, API, Error, FreeResource) {\ + if ( eRetVal == eCompare )\ +{\ + if ( DEBUG )\ +{\ + FPRINTF("[Line : %d][%s] %s passed\\n", __LINE__, API_NAMESPACE, API);\ +}\ +}\ +else \ +{\ + FPRINTF("[Line : %d][%s] %s failed, error returned = %s [%d]\\n", __LINE__, API_NAMESPACE, API, Error, eRetVal);\ + FreeResource;\ + return 1;\ +}\ +} + +#define CHECK_VALUE_STRING(StringVariable, API) {\ + if ( StringVariable == NULL )\ +{\ + FPRINTF("[Line : %d][%s] %s failed, error returned = value returned is NULL\\n", __LINE__, API_NAMESPACE, API);\ + return 1;\ +}\ + else if ( DEBUG )\ +{\ + FPRINTF("[Line : %d][%s] value returned = %s\\n", __LINE__, API_NAMESPACE, StringVariable);\ +}\ + free(StringVariable);\ + StringVariable = NULL;\ +} + +#define CHECK_VALUE_INT(Variable, API) {\ + if ( Variable == 0 )\ +{\ + FPRINTF("[Line : %d][%s] %s failed, error returned = value returned is Zero\\n", __LINE__, API_NAMESPACE, API);\ + return 1;\ +}\ + else if ( DEBUG )\ +{\ + FPRINTF("[Line : %d][%s] value returned = %d\\n", __LINE__, API_NAMESPACE, Variable);\ +}\ +} + +#define CHECK_HANDLE(Handle, API) {\ + if ( Handle == NULL )\ +{\ + FPRINTF("[Line : %d][%s] %s failed, error returned = Handle returned is NULL\\n", __LINE__, API_NAMESPACE, API);\ + return 1;\ +}\ +} + +#define FREE_MEMORY(buffer) {\ + if ( buffer != NULL )\ +{\ + free(buffer);\ + buffer = NULL;\ +}\ +} + +bool TCTCheckSystemInfoFeatureSupported(char* pszKey, char* pszModuleName){ + return false; +} +char* TCTSystemInfoGetError(int nRet){ + return NULL; +} +bool GetValueFromConfigFile(char* pstrKeyString, char* pstrValue, char* pstrModule){ + return false; +} +bool GetValueForTCTSetting(char* pstrKeyString, char* pstrValue, char* pstrModule){ + return false; +} + +#define dlog_print( type, tag, ...) do{ \ + fprintf(stdout, ##__VA_ARGS__ ); \ + fprintf(stdout, "\n" ); \ +} while(0) + +#define PRINT_UTC_LOG(...) do{ \ + fprintf(stdout, ##__VA_ARGS__ ); \ + fprintf(stdout, "\n" ); \ +} while(0) + +#endif + +#ifdef __cplusplus +} +#endif + +#endif // _TCT_COMMON_H_ diff --git a/unittest/include/testcase.h b/unittest/include/testcase.h new file mode 100755 index 0000000..febac28 --- /dev/null +++ b/unittest/include/testcase.h @@ -0,0 +1,40 @@ +// +// Copyright (c) 2020 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 _TESTCASE_H_ +#define _TESTCASE_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/* pointer to startup/cleanup functions */ +typedef void (*void_fun_ptr)(void); + +/* pointer to testcase functions */ +typedef int (*tc_fun_ptr)(void); + +/* struct describing specific testcase */ +typedef struct testcase_s { + const char* name; + tc_fun_ptr function; + void_fun_ptr startup; + void_fun_ptr cleanup; +} testcase; + +#ifdef __cplusplus +} +#endif +#endif // _TESTCASE_H_ diff --git a/unittest/mock/smartcard-mock.c b/unittest/mock/smartcard-mock.c new file mode 100755 index 0000000..e342d54 --- /dev/null +++ b/unittest/mock/smartcard-mock.c @@ -0,0 +1,321 @@ +// +// Copyright (c) 2020 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 +#include +#include +#include + +#include +#include +#include + +#ifndef API +#define API __attribute__ ((visibility("default"))) +#endif + +struct _SmartcardServiceSeService; +typedef struct _SmartcardServiceSeService SmartcardServiceSeService; +typedef struct _SmartcardServiceSeServiceIface SmartcardServiceSeServiceIface; + +struct _SmartcardServiceSeServiceIface +{ + GTypeInterface parent_iface; + + gboolean (*handle_se_service) ( + SmartcardServiceSeService *object, + GDBusMethodInvocation *invocation); + + gboolean (*handle_shutdown) ( + SmartcardServiceSeService *object, + GDBusMethodInvocation *invocation, + guint arg_service_id); + + void (*reader_inserted) ( + SmartcardServiceSeService *object, + guint arg_reader_id, + const gchar *arg_reader_name); + + void (*reader_removed) ( + SmartcardServiceSeService *object, + guint arg_reader_id, + const gchar *arg_reader_name); +}; + +struct _SmartcardServiceReader; +typedef struct _SmartcardServiceReader SmartcardServiceReader; +typedef struct _SmartcardServiceReaderIface SmartcardServiceReaderIface; + +struct _SmartcardServiceReaderIface +{ + GTypeInterface parent_iface; + + gboolean (*handle_open_session) ( + SmartcardServiceReader *object, + GDBusMethodInvocation *invocation, + guint arg_service_id, + guint arg_reader_id); +}; + +struct _SmartcardServiceSession; +typedef struct _SmartcardServiceSession SmartcardServiceSession; +typedef struct _SmartcardServiceSessionIface SmartcardServiceSessionIface; + +struct _SmartcardServiceSessionIface +{ + GTypeInterface parent_iface; + + gboolean (*handle_close_session) ( + SmartcardServiceSession *object, + GDBusMethodInvocation *invocation, + guint arg_service_id, + guint arg_session_id); + + gboolean (*handle_get_atr) ( + SmartcardServiceSession *object, + GDBusMethodInvocation *invocation, + guint arg_service_id, + guint arg_session_id); + + gboolean (*handle_open_channel) ( + SmartcardServiceSession *object, + GDBusMethodInvocation *invocation, + guint arg_service_id, + guint arg_session_id, + guint arg_type, + GVariant *arg_aid, + guchar arg_P2); +}; + +struct _SmartcardServiceChannel; +typedef struct _SmartcardServiceChannel SmartcardServiceChannel; +typedef struct _SmartcardServiceChannelIface SmartcardServiceChannelIface; + +struct _SmartcardServiceChannelIface +{ + GTypeInterface parent_iface; + + gboolean (*handle_close_channel) ( + SmartcardServiceChannel *object, + GDBusMethodInvocation *invocation, + guint arg_service_id, + guint arg_channel_id); + + gboolean (*handle_transmit) ( + SmartcardServiceChannel *object, + GDBusMethodInvocation *invocation, + guint arg_service_id, + guint arg_channel_id, + GVariant *arg_command); +}; + +static GVariant *_convert_array_to_variant(unsigned char *array, int size) +{ + GVariantBuilder builder; + int i; + + g_variant_builder_init(&builder, G_VARIANT_TYPE("a(y)")); + + for (i = 0; i < size; i++) + g_variant_builder_add(&builder, "(y)", array[i]); + + return g_variant_builder_end(&builder); +} + +API int system_info_get_platform_bool(const char *key, bool *value) +{ + *value = true; + return SYSTEM_INFO_ERROR_NONE; +} + +API gulong g_signal_connect_data(gpointer instance, + const gchar *detailed_signal, + GCallback c_handler, + gpointer data, + GClosureNotify destroy_data, + GConnectFlags connect_flags) +{ + return 0; +} + +API SmartcardServiceSeService *smartcard_service_se_service_proxy_new_for_bus_sync ( + GBusType bus_type, + GDBusProxyFlags flags, + const gchar *name, + const gchar *object_path, + GCancellable *cancellable, + GError **error) +{ + return (void *)1234; +} + +API gboolean smartcard_service_se_service_call_se_service_sync ( + SmartcardServiceSeService *proxy, + gint *out_result, + guint *out_handle, + GVariant **out_readers, + GCancellable *cancellable, + GError **error) +{ + *out_handle = 1234; + *out_result = 0; + + GVariantBuilder *builder = NULL; + builder = g_variant_builder_new(G_VARIANT_TYPE("a(us)")); + g_variant_builder_open(builder, G_VARIANT_TYPE("(us)")); + g_variant_builder_add(builder, "u", g_variant_new_uint32(1)); + g_variant_builder_add(builder, "s", "SIM"); + g_variant_builder_close(builder); + *out_readers = g_variant_builder_end(builder); + + return true; +} + +API gboolean smartcard_service_se_service_call_shutdown_sync ( + SmartcardServiceSeService *proxy, + guint arg_service_id, + gint *out_result, + GCancellable *cancellable, + GError **error) +{ + *out_result = 0; + return true; +} + +API SmartcardServiceReader *smartcard_service_reader_proxy_new_for_bus_sync ( + GBusType bus_type, + GDBusProxyFlags flags, + const gchar *name, + const gchar *object_path, + GCancellable *cancellable, + GError **error) +{ + return (void *)1234; +} + +API gboolean smartcard_service_reader_call_open_session_sync ( + SmartcardServiceReader *proxy, + guint arg_service_id, + guint arg_reader_id, + gint *out_result, + guint *out_handle, + GCancellable *cancellable, + GError **error) +{ + *out_handle = 1234; + *out_result = 0; + return true; +} + +API SmartcardServiceSession *smartcard_service_session_proxy_new_for_bus_sync ( + GBusType bus_type, + GDBusProxyFlags flags, + const gchar *name, + const gchar *object_path, + GCancellable *cancellable, + GError **error) +{ + return (void *)1234; +} + +API gboolean smartcard_service_session_call_get_atr_sync ( + SmartcardServiceSession *proxy, + guint arg_service_id, + guint arg_session_id, + gint *out_result, + GVariant **out_atr, + GCancellable *cancellable, + GError **error) +{ + unsigned char array[] = {0x01, 0x02, 0x03}; + *out_atr = _convert_array_to_variant(array, 3); + *out_result = 0; + return true; +} + +API gboolean smartcard_service_session_call_open_channel_sync ( + SmartcardServiceSession *proxy, + guint arg_service_id, + guint arg_session_id, + guint arg_type, + GVariant *arg_aid, + guchar arg_P2, + gint *out_result, + guint *out_handle, + gint *out_channel_number, + GVariant **out_select_response, + GCancellable *cancellable, + GError **error) +{ + unsigned char array[] = {0x01, 0x02, 0x03}; + *out_result = 0; + *out_handle = 1234; + *out_channel_number = 1; + *out_select_response = _convert_array_to_variant(array, 3); + return true; +} + +API gboolean smartcard_service_session_call_close_session_sync ( + SmartcardServiceSession *proxy, + guint arg_service_id, + guint arg_session_id, + gint *out_result, + GCancellable *cancellable, + GError **error) +{ + *out_result = 0; + return true; +} + + +API SmartcardServiceChannel *smartcard_service_channel_proxy_new_for_bus_sync ( + GBusType bus_type, + GDBusProxyFlags flags, + const gchar *name, + const gchar *object_path, + GCancellable *cancellable, + GError **error) +{ + return (void *)1234; +} + +API gboolean smartcard_service_channel_call_transmit_sync ( + SmartcardServiceChannel *proxy, + guint arg_service_id, + guint arg_channel_id, + GVariant *arg_command, + gint *out_result, + GVariant **out_response, + GCancellable *cancellable, + GError **error) +{ + unsigned char array[] = {0x01, 0x02, 0x03}; + *out_response = _convert_array_to_variant(array, 3); + *out_result = 0; + return true; +} + + +API gboolean smartcard_service_channel_call_close_channel_sync ( + SmartcardServiceChannel *proxy, + guint arg_service_id, + guint arg_channel_id, + gint *out_result, + GCancellable *cancellable, + GError **error) +{ + *out_result = 0; + return true; +} diff --git a/unittest/run_coverage.sh b/unittest/run_coverage.sh new file mode 100755 index 0000000..38d5cb3 --- /dev/null +++ b/unittest/run_coverage.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +export LD_LIBRARY_PATH=..:.:$LD_LIBRARY_PATH +pushd ../ +RootDir=$PWD +popd + +unitTestFile=tct-smartcard-core +if [ ! -x "./$unitTestFile" ] +then + echo "$unitTestFile file does not exist!" + exit -1 +fi + +LD_PRELOAD=./libsmartcard-mock.so ./$unitTestFile + +CMakeDir=${RootDir}/CMakeFiles/capi-network-smartcard.dir/src +CoverageDir=${RootDir}/coverage + +pushd $CMakeDir + + for obj in `ls *.o` + do + gcov -b -c $obj + done + + if [ -f /usr/bin/lcov ] + then + lcov -c -d . --exclude "/usr/lib/gcc/armv7l-tizen-linux-gnueabi/9.2.0/include/c++/*" -o cov.info + genhtml cov.info -o ${CoverageDir} + echo "Coverage test result created! [${CoverageDir}]" + else + echo "lcov does not exist!" + fi +popd diff --git a/unittest/tct-smartcard-core.cpp b/unittest/tct-smartcard-core.cpp new file mode 100755 index 0000000..763e076 --- /dev/null +++ b/unittest/tct-smartcard-core.cpp @@ -0,0 +1,108 @@ +// +// Copyright (c) 2020 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 +#include +#include "tct_common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef MOBILE +#include "tct-smartcard-core_mobile.h" +#endif + +#ifdef WEARABLE +#include "tct-smartcard-core_wearable.h" +#endif + +#ifdef TIZENIOT +#include "tct-smartcard-core_tizeniot.h" +#endif //TIZENIOT + +#ifdef TV +#include "tct-smartcard-core_tv.h" +#endif // TV + +#ifdef __cplusplus +} +#endif + +#include + +#include +#include +#include +#include +#include +#include + +TEST(smartcard, smartcard){ + char *pszGetTCName = NULL; + pszGetTCName = (char*)malloc( 256 ); + memset( pszGetTCName, 0x00, 256); + strcpy( pszGetTCName, "utc_smartcard"); + int i=0, result=0; + + dlog_print(DLOG_INFO, "NativeTCT", "[%s:%d] Executing TC Name = %s", __FUNCTION__, __LINE__, pszGetTCName); + + int successCnt = 0; + int errorCnt = 0; + for ( i = 0; tc_array[i].name; i++ ) + { + if ( 0 == strncmp(pszGetTCName, tc_array[i].name, strlen(pszGetTCName)) ) + { + if ( tc_array[i].startup ) + { + tc_array[i].startup(); + } + + result = tc_array[i].function(); + + if( result == 0 ){ + successCnt++; + } + else { + dlog_print(DLOG_INFO, "NativeTCT", "[Error][%d] %s returns value = %d", i, tc_array[i].name, result); + errorCnt++; + } + + EXPECT_EQ(result, 0); + // ASSERT_EQ(result, 0); + + if ( tc_array[i].cleanup ) + { + tc_array[i].cleanup(); + } + } + else { + dlog_print(DLOG_INFO, "NativeTCT", "Name check error! [%s][%s]", pszGetTCName, tc_array[i].name); + ASSERT_EQ(0, 1); + } + } + + dlog_print(DLOG_INFO, "NativeTCT", "=========================="); + dlog_print(DLOG_INFO, "NativeTCT", "Success [%4d / %4d]", successCnt, successCnt + errorCnt); + dlog_print(DLOG_INFO, "NativeTCT", "Error [%4d / %4d]", errorCnt, successCnt + errorCnt); + dlog_print(DLOG_INFO, "NativeTCT", "=========================="); + + FREE_MEMORY_TC(pszGetTCName); +} + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/unittest/tct-smartcard-core_mobile.h b/unittest/tct-smartcard-core_mobile.h new file mode 100755 index 0000000..24baa81 --- /dev/null +++ b/unittest/tct-smartcard-core_mobile.h @@ -0,0 +1,110 @@ +// +// Copyright (c) 2020 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 __TCT_SMARTCARD_NATIVE_H__ +#define __TCT_SMARTCARD_NATIVE_H__ + +#include "testcase.h" +#include "tct_common.h" + +extern void utc_smartcard_service_startup(void); +extern void utc_smartcard_service_cleanup(void); +extern void utc_smartcard_reader_startup(void); +extern void utc_smartcard_reader_cleanup(void); +extern void utc_smartcard_session_startup(void); +extern void utc_smartcard_session_cleanup(void); +extern void utc_smartcard_channel_startup(void); +extern void utc_smartcard_channel_cleanup(void); + +extern int utc_smartcard_smartcard_initialize_p(void); +extern int utc_smartcard_smartcard_deinitialize_p(void); +extern int utc_smartcard_smartcard_deinitialize_n(void); +extern int utc_smartcard_smartcard_get_version_p(void); +extern int utc_smartcard_smartcard_get_version_n(void); +extern int utc_smartcard_smartcard_get_readers_p(void); +extern int utc_smartcard_smartcard_get_readers_n(void); +extern int utc_smartcard_smartcard_reader_get_name_p(void); +extern int utc_smartcard_smartcard_reader_get_name_n(void); +extern int utc_smartcard_smartcard_reader_is_secure_element_present_p(void); +extern int utc_smartcard_smartcard_reader_is_secure_element_present_n(void); +extern int utc_smartcard_smartcard_reader_open_session_p(void); +extern int utc_smartcard_smartcard_reader_open_session_n(void); +extern int utc_smartcard_smartcard_reader_close_sessions_p(void); +extern int utc_smartcard_smartcard_reader_close_sessions_n(void); +extern int utc_smartcard_smartcard_reader_set_event_cb_p(void); +extern int utc_smartcard_smartcard_reader_set_event_cb_n(void); +extern int utc_smartcard_smartcard_session_get_reader_p(void); +extern int utc_smartcard_smartcard_session_get_reader_n(void); +extern int utc_smartcard_smartcard_session_get_atr_p(void); +extern int utc_smartcard_smartcard_session_get_atr_n(void); +extern int utc_smartcard_smartcard_session_close_p(void); +extern int utc_smartcard_smartcard_session_close_n(void); +extern int utc_smartcard_smartcard_session_is_closed_p(void); +extern int utc_smartcard_smartcard_session_is_closed_n(void); +extern int utc_smartcard_smartcard_session_close_channels_p(void); +extern int utc_smartcard_smartcard_session_close_channels_n(void); +extern int utc_smartcard_smartcard_session_open_basic_channel_n(void); +extern int utc_smartcard_smartcard_session_open_logical_channel_n(void); +extern int utc_smartcard_smartcard_channel_close_n(void); +extern int utc_smartcard_smartcard_channel_is_basic_channel_n(void); +extern int utc_smartcard_smartcard_channel_is_closed_n(void); +extern int utc_smartcard_smartcard_channel_get_select_response_n(void); +extern int utc_smartcard_smartcard_channel_get_session_n(void); +extern int utc_smartcard_smartcard_channel_transmit_n(void); +extern int utc_smartcard_smartcard_channel_transmit_retrieve_response_n(void); +extern int utc_smartcard_smartcard_channel_select_next_n(void); + +testcase tc_array[] = { + {"utc_smartcard_smartcard_initialize_p",utc_smartcard_smartcard_initialize_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_deinitialize_p",utc_smartcard_smartcard_deinitialize_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_deinitialize_n",utc_smartcard_smartcard_deinitialize_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_version_p",utc_smartcard_smartcard_get_version_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_version_n",utc_smartcard_smartcard_get_version_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_readers_p",utc_smartcard_smartcard_get_readers_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_readers_n",utc_smartcard_smartcard_get_readers_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_reader_get_name_p",utc_smartcard_smartcard_reader_get_name_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_get_name_n",utc_smartcard_smartcard_reader_get_name_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_is_secure_element_present_p",utc_smartcard_smartcard_reader_is_secure_element_present_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_is_secure_element_present_n",utc_smartcard_smartcard_reader_is_secure_element_present_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_open_session_p",utc_smartcard_smartcard_reader_open_session_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_open_session_n",utc_smartcard_smartcard_reader_open_session_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_close_sessions_p",utc_smartcard_smartcard_reader_close_sessions_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_close_sessions_n",utc_smartcard_smartcard_reader_close_sessions_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_set_event_cb_p",utc_smartcard_smartcard_reader_set_event_cb_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_set_event_cb_n",utc_smartcard_smartcard_reader_set_event_cb_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_session_get_reader_p",utc_smartcard_smartcard_session_get_reader_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_reader_n",utc_smartcard_smartcard_session_get_reader_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_atr_p",utc_smartcard_smartcard_session_get_atr_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_atr_n",utc_smartcard_smartcard_session_get_atr_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_p",utc_smartcard_smartcard_session_close_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_n",utc_smartcard_smartcard_session_close_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_is_closed_p",utc_smartcard_smartcard_session_is_closed_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_is_closed_n",utc_smartcard_smartcard_session_is_closed_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_channels_p",utc_smartcard_smartcard_session_close_channels_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_channels_n",utc_smartcard_smartcard_session_close_channels_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_open_basic_channel_n",utc_smartcard_smartcard_session_open_basic_channel_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_open_logical_channel_n",utc_smartcard_smartcard_session_open_logical_channel_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_channel_close_n",utc_smartcard_smartcard_channel_close_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_is_basic_channel_n",utc_smartcard_smartcard_channel_is_basic_channel_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_is_closed_n",utc_smartcard_smartcard_channel_is_closed_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_get_select_response_n",utc_smartcard_smartcard_channel_get_select_response_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_get_session_n",utc_smartcard_smartcard_channel_get_session_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_transmit_n",utc_smartcard_smartcard_channel_transmit_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_transmit_retrieve_response_n",utc_smartcard_smartcard_channel_transmit_retrieve_response_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_select_next_n",utc_smartcard_smartcard_channel_select_next_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {NULL, NULL} +}; + +#endif // __TCT_SMARTCARD_NATIVE_H__ diff --git a/unittest/tct-smartcard-core_tizeniot.h b/unittest/tct-smartcard-core_tizeniot.h new file mode 100755 index 0000000..51d63d3 --- /dev/null +++ b/unittest/tct-smartcard-core_tizeniot.h @@ -0,0 +1,110 @@ +// +// Copyright (c) 2020 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 __TCT_SMARTCARD-NATIVE_H__ +#define __TCT_SMARTCARD-NATIVE_H__ + +#include "testcase.h" +#include "tct_common.h" + +extern void utc_smartcard_service_startup(void); +extern void utc_smartcard_service_cleanup(void); +extern void utc_smartcard_reader_startup(void); +extern void utc_smartcard_reader_cleanup(void); +extern void utc_smartcard_session_startup(void); +extern void utc_smartcard_session_cleanup(void); +extern void utc_smartcard_channel_startup(void); +extern void utc_smartcard_channel_cleanup(void); + +extern int utc_smartcard_smartcard_initialize_p(void); +extern int utc_smartcard_smartcard_deinitialize_p(void); +extern int utc_smartcard_smartcard_deinitialize_n(void); +extern int utc_smartcard_smartcard_get_version_p(void); +extern int utc_smartcard_smartcard_get_version_n(void); +extern int utc_smartcard_smartcard_get_readers_p(void); +extern int utc_smartcard_smartcard_get_readers_n(void); +extern int utc_smartcard_smartcard_reader_get_name_p(void); +extern int utc_smartcard_smartcard_reader_get_name_n(void); +extern int utc_smartcard_smartcard_reader_is_secure_element_present_p(void); +extern int utc_smartcard_smartcard_reader_is_secure_element_present_n(void); +extern int utc_smartcard_smartcard_reader_open_session_p(void); +extern int utc_smartcard_smartcard_reader_open_session_n(void); +extern int utc_smartcard_smartcard_reader_close_sessions_p(void); +extern int utc_smartcard_smartcard_reader_close_sessions_n(void); +extern int utc_smartcard_smartcard_reader_set_event_cb_p(void); +extern int utc_smartcard_smartcard_reader_set_event_cb_n(void); +extern int utc_smartcard_smartcard_session_get_reader_p(void); +extern int utc_smartcard_smartcard_session_get_reader_n(void); +extern int utc_smartcard_smartcard_session_get_atr_p(void); +extern int utc_smartcard_smartcard_session_get_atr_n(void); +extern int utc_smartcard_smartcard_session_close_p(void); +extern int utc_smartcard_smartcard_session_close_n(void); +extern int utc_smartcard_smartcard_session_is_closed_p(void); +extern int utc_smartcard_smartcard_session_is_closed_n(void); +extern int utc_smartcard_smartcard_session_close_channels_p(void); +extern int utc_smartcard_smartcard_session_close_channels_n(void); +extern int utc_smartcard_smartcard_session_open_basic_channel_n(void); +extern int utc_smartcard_smartcard_session_open_logical_channel_n(void); +extern int utc_smartcard_smartcard_channel_close_n(void); +extern int utc_smartcard_smartcard_channel_is_basic_channel_n(void); +extern int utc_smartcard_smartcard_channel_is_closed_n(void); +extern int utc_smartcard_smartcard_channel_get_select_response_n(void); +extern int utc_smartcard_smartcard_channel_get_session_n(void); +extern int utc_smartcard_smartcard_channel_transmit_n(void); +extern int utc_smartcard_smartcard_channel_transmit_retrieve_response_n(void); +extern int utc_smartcard_smartcard_channel_select_next_n(void); + +testcase tc_array[] = { + {"utc_smartcard_smartcard_initialize_p",utc_smartcard_smartcard_initialize_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_deinitialize_p",utc_smartcard_smartcard_deinitialize_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_deinitialize_n",utc_smartcard_smartcard_deinitialize_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_version_p",utc_smartcard_smartcard_get_version_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_version_n",utc_smartcard_smartcard_get_version_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_readers_p",utc_smartcard_smartcard_get_readers_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_readers_n",utc_smartcard_smartcard_get_readers_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_reader_get_name_p",utc_smartcard_smartcard_reader_get_name_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_get_name_n",utc_smartcard_smartcard_reader_get_name_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_is_secure_element_present_p",utc_smartcard_smartcard_reader_is_secure_element_present_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_is_secure_element_present_n",utc_smartcard_smartcard_reader_is_secure_element_present_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_open_session_p",utc_smartcard_smartcard_reader_open_session_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_open_session_n",utc_smartcard_smartcard_reader_open_session_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_close_sessions_p",utc_smartcard_smartcard_reader_close_sessions_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_close_sessions_n",utc_smartcard_smartcard_reader_close_sessions_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_set_event_cb_p",utc_smartcard_smartcard_reader_set_event_cb_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_set_event_cb_n",utc_smartcard_smartcard_reader_set_event_cb_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_session_get_reader_p",utc_smartcard_smartcard_session_get_reader_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_reader_n",utc_smartcard_smartcard_session_get_reader_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_atr_p",utc_smartcard_smartcard_session_get_atr_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_atr_n",utc_smartcard_smartcard_session_get_atr_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_p",utc_smartcard_smartcard_session_close_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_n",utc_smartcard_smartcard_session_close_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_is_closed_p",utc_smartcard_smartcard_session_is_closed_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_is_closed_n",utc_smartcard_smartcard_session_is_closed_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_channels_p",utc_smartcard_smartcard_session_close_channels_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_channels_n",utc_smartcard_smartcard_session_close_channels_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_open_basic_channel_n",utc_smartcard_smartcard_session_open_basic_channel_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_open_logical_channel_n",utc_smartcard_smartcard_session_open_logical_channel_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_channel_close_n",utc_smartcard_smartcard_channel_close_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_is_basic_channel_n",utc_smartcard_smartcard_channel_is_basic_channel_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_is_closed_n",utc_smartcard_smartcard_channel_is_closed_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_get_select_response_n",utc_smartcard_smartcard_channel_get_select_response_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_get_session_n",utc_smartcard_smartcard_channel_get_session_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_transmit_n",utc_smartcard_smartcard_channel_transmit_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_transmit_retrieve_response_n",utc_smartcard_smartcard_channel_transmit_retrieve_response_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_select_next_n",utc_smartcard_smartcard_channel_select_next_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {NULL, NULL} +}; + +#endif // __TCT_SMARTCARD-NATIVE_H__ diff --git a/unittest/tct-smartcard-core_wearable.h b/unittest/tct-smartcard-core_wearable.h new file mode 100755 index 0000000..51d63d3 --- /dev/null +++ b/unittest/tct-smartcard-core_wearable.h @@ -0,0 +1,110 @@ +// +// Copyright (c) 2020 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 __TCT_SMARTCARD-NATIVE_H__ +#define __TCT_SMARTCARD-NATIVE_H__ + +#include "testcase.h" +#include "tct_common.h" + +extern void utc_smartcard_service_startup(void); +extern void utc_smartcard_service_cleanup(void); +extern void utc_smartcard_reader_startup(void); +extern void utc_smartcard_reader_cleanup(void); +extern void utc_smartcard_session_startup(void); +extern void utc_smartcard_session_cleanup(void); +extern void utc_smartcard_channel_startup(void); +extern void utc_smartcard_channel_cleanup(void); + +extern int utc_smartcard_smartcard_initialize_p(void); +extern int utc_smartcard_smartcard_deinitialize_p(void); +extern int utc_smartcard_smartcard_deinitialize_n(void); +extern int utc_smartcard_smartcard_get_version_p(void); +extern int utc_smartcard_smartcard_get_version_n(void); +extern int utc_smartcard_smartcard_get_readers_p(void); +extern int utc_smartcard_smartcard_get_readers_n(void); +extern int utc_smartcard_smartcard_reader_get_name_p(void); +extern int utc_smartcard_smartcard_reader_get_name_n(void); +extern int utc_smartcard_smartcard_reader_is_secure_element_present_p(void); +extern int utc_smartcard_smartcard_reader_is_secure_element_present_n(void); +extern int utc_smartcard_smartcard_reader_open_session_p(void); +extern int utc_smartcard_smartcard_reader_open_session_n(void); +extern int utc_smartcard_smartcard_reader_close_sessions_p(void); +extern int utc_smartcard_smartcard_reader_close_sessions_n(void); +extern int utc_smartcard_smartcard_reader_set_event_cb_p(void); +extern int utc_smartcard_smartcard_reader_set_event_cb_n(void); +extern int utc_smartcard_smartcard_session_get_reader_p(void); +extern int utc_smartcard_smartcard_session_get_reader_n(void); +extern int utc_smartcard_smartcard_session_get_atr_p(void); +extern int utc_smartcard_smartcard_session_get_atr_n(void); +extern int utc_smartcard_smartcard_session_close_p(void); +extern int utc_smartcard_smartcard_session_close_n(void); +extern int utc_smartcard_smartcard_session_is_closed_p(void); +extern int utc_smartcard_smartcard_session_is_closed_n(void); +extern int utc_smartcard_smartcard_session_close_channels_p(void); +extern int utc_smartcard_smartcard_session_close_channels_n(void); +extern int utc_smartcard_smartcard_session_open_basic_channel_n(void); +extern int utc_smartcard_smartcard_session_open_logical_channel_n(void); +extern int utc_smartcard_smartcard_channel_close_n(void); +extern int utc_smartcard_smartcard_channel_is_basic_channel_n(void); +extern int utc_smartcard_smartcard_channel_is_closed_n(void); +extern int utc_smartcard_smartcard_channel_get_select_response_n(void); +extern int utc_smartcard_smartcard_channel_get_session_n(void); +extern int utc_smartcard_smartcard_channel_transmit_n(void); +extern int utc_smartcard_smartcard_channel_transmit_retrieve_response_n(void); +extern int utc_smartcard_smartcard_channel_select_next_n(void); + +testcase tc_array[] = { + {"utc_smartcard_smartcard_initialize_p",utc_smartcard_smartcard_initialize_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_deinitialize_p",utc_smartcard_smartcard_deinitialize_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_deinitialize_n",utc_smartcard_smartcard_deinitialize_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_version_p",utc_smartcard_smartcard_get_version_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_version_n",utc_smartcard_smartcard_get_version_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_readers_p",utc_smartcard_smartcard_get_readers_p,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_get_readers_n",utc_smartcard_smartcard_get_readers_n,utc_smartcard_service_startup,utc_smartcard_service_cleanup}, + {"utc_smartcard_smartcard_reader_get_name_p",utc_smartcard_smartcard_reader_get_name_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_get_name_n",utc_smartcard_smartcard_reader_get_name_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_is_secure_element_present_p",utc_smartcard_smartcard_reader_is_secure_element_present_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_is_secure_element_present_n",utc_smartcard_smartcard_reader_is_secure_element_present_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_open_session_p",utc_smartcard_smartcard_reader_open_session_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_open_session_n",utc_smartcard_smartcard_reader_open_session_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_close_sessions_p",utc_smartcard_smartcard_reader_close_sessions_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_close_sessions_n",utc_smartcard_smartcard_reader_close_sessions_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_set_event_cb_p",utc_smartcard_smartcard_reader_set_event_cb_p,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_reader_set_event_cb_n",utc_smartcard_smartcard_reader_set_event_cb_n,utc_smartcard_reader_startup,utc_smartcard_reader_cleanup}, + {"utc_smartcard_smartcard_session_get_reader_p",utc_smartcard_smartcard_session_get_reader_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_reader_n",utc_smartcard_smartcard_session_get_reader_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_atr_p",utc_smartcard_smartcard_session_get_atr_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_get_atr_n",utc_smartcard_smartcard_session_get_atr_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_p",utc_smartcard_smartcard_session_close_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_n",utc_smartcard_smartcard_session_close_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_is_closed_p",utc_smartcard_smartcard_session_is_closed_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_is_closed_n",utc_smartcard_smartcard_session_is_closed_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_channels_p",utc_smartcard_smartcard_session_close_channels_p,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_close_channels_n",utc_smartcard_smartcard_session_close_channels_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_open_basic_channel_n",utc_smartcard_smartcard_session_open_basic_channel_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_session_open_logical_channel_n",utc_smartcard_smartcard_session_open_logical_channel_n,utc_smartcard_session_startup,utc_smartcard_session_cleanup}, + {"utc_smartcard_smartcard_channel_close_n",utc_smartcard_smartcard_channel_close_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_is_basic_channel_n",utc_smartcard_smartcard_channel_is_basic_channel_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_is_closed_n",utc_smartcard_smartcard_channel_is_closed_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_get_select_response_n",utc_smartcard_smartcard_channel_get_select_response_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_get_session_n",utc_smartcard_smartcard_channel_get_session_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_transmit_n",utc_smartcard_smartcard_channel_transmit_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_transmit_retrieve_response_n",utc_smartcard_smartcard_channel_transmit_retrieve_response_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {"utc_smartcard_smartcard_channel_select_next_n",utc_smartcard_smartcard_channel_select_next_n,utc_smartcard_channel_startup,utc_smartcard_channel_cleanup}, + {NULL, NULL} +}; + +#endif // __TCT_SMARTCARD-NATIVE_H__ diff --git a/unittest/utc-smartcard-channel.c b/unittest/utc-smartcard-channel.c new file mode 100755 index 0000000..3444345 --- /dev/null +++ b/unittest/utc-smartcard-channel.c @@ -0,0 +1,192 @@ +// +// Copyright (c) 2020 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 "utc-smartcard.h" + +static int _init_state = SMARTCARD_ERROR_NONE; + +/** + * @function utc_smartcard_channel_startup + * @description Called before each test + * @parameter NA + * @return NA + */ +void utc_smartcard_channel_startup(void) +{ + _init_state = smartcard_initialize(); +} + +/** + * @function utc_smartcard_channel_cleanup + * @description Called after each test + * @parameter NA + * @return NA + */ +void utc_smartcard_channel_cleanup(void) +{ + smartcard_deinitialize(); +} + +/** + * @testcase utc_smartcard_smartcard_channel_close_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_close_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_close(0); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_channel_is_basic_channel_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_is_basic_channel_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_is_basic_channel(0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_channel_is_closed_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_is_closed_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_is_closed(0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_channel_get_select_response_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_get_select_response_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_get_select_response(0, NULL, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_channel_get_session_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_get_session_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_get_session(0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_channel_transmit_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_transmit_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_transmit(0, NULL, 0, NULL, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_channel_transmit_retrieve_response_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_transmit_retrieve_response_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_transmit_retrieve_response(0, NULL, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_channel_select_next_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_channel_select_next_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_channel_select_next(0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} diff --git a/unittest/utc-smartcard-reader.c b/unittest/utc-smartcard-reader.c new file mode 100755 index 0000000..e96ac34 --- /dev/null +++ b/unittest/utc-smartcard-reader.c @@ -0,0 +1,257 @@ +// +// Copyright (c) 2020 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 "utc-smartcard.h" + +static int reader; +static int _init_state = SMARTCARD_ERROR_NONE; + +/** + * @function utc_smartcard_reader_startup + * @description Called before each test + * @parameter NA + * @return NA + */ +void utc_smartcard_reader_startup(void) +{ + int length; + int* readers; + + _init_state = smartcard_initialize(); + if(SMARTCARD_ERROR_NONE == _init_state) + { + _init_state = smartcard_get_readers(&readers, &length); + if(SMARTCARD_ERROR_NONE == _init_state && length > 0) + reader = readers[0]; + else + _init_state = SMARTCARD_ERROR_GENERAL; + } +} + +/** + * @function utc_smartcard_reader_cleanup + * @description Called after each test + * @parameter NA + * @return NA + */ +void utc_smartcard_reader_cleanup(void) +{ + smartcard_deinitialize(); +} + +/** + * @testcase utc_smartcard_smartcard_reader_get_name_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_get_name_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + char *reader_name; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_get_name(reader, &reader_name); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_reader_get_name_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_get_name_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_get_name(reader, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_reader_is_secure_element_present_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_is_secure_element_present_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + bool is_present = false; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_is_secure_element_present(reader, &is_present); + // process end + + //if ispresent is true + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_reader_is_secure_element_present_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_is_secure_element_present_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_is_secure_element_present(reader, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_reader_open_session_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_open_session_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + int session; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_open_session(reader, &session); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_reader_open_session_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_open_session_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_open_session(reader, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_reader_close_sessions_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_close_sessions_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_close_sessions(reader); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_reader_close_sessions_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_reader_close_sessions_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_close_sessions(0); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +static void __reader_event_cb(int reader_id, smartcard_reader_event_type_e event_type, void *user_data) +{ + return; +} + +/** + * @testcase utc_smartcard_smartcard_reader_close_sessions_p + * @since_tizen 3.0 + * @description + */ +int utc_smartcard_smartcard_reader_set_event_cb_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_set_event_cb(__reader_event_cb, NULL); + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + + ret = smartcard_reader_unset_event_cb(); + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + // process end + + return 0; + +} + +/** + * @testcase utc_smartcard_smartcard_reader_close_sessions_n + * @since_tizen 3.0 + * @description + */ +int utc_smartcard_smartcard_reader_set_event_cb_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_reader_set_event_cb(NULL, NULL); + + if (ret == SMARTCARD_ERROR_INVALID_PARAMETER) { + smartcard_deinitialize(); + ret = smartcard_reader_unset_event_cb(); + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NOT_INITIALIZED); + } else { + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + } + // process end + + return 0; +} diff --git a/unittest/utc-smartcard-service.c b/unittest/utc-smartcard-service.c new file mode 100755 index 0000000..6e6597c --- /dev/null +++ b/unittest/utc-smartcard-service.c @@ -0,0 +1,176 @@ +// +// Copyright (c) 2020 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 "utc-smartcard.h" + +static int _init_state = SMARTCARD_ERROR_NONE; + +/** + * @function utc_smartcard_service_startup + * @description Called before each test + * @parameter NA + * @return NA + */ +void utc_smartcard_service_startup(void) +{ + _init_state = smartcard_initialize(); +} + +/** + * @function utc_smartcard_service_cleanup + * @description Called after each test + * @parameter NA + * @return NA + */ +void utc_smartcard_service_cleanup(void) +{ + smartcard_deinitialize(); +} + +/** + * @testcase utc_smartcard_smartcard_initialize_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_initialize_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_initialize(); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_deinitialize_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_deinitialize_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_deinitialize(); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_deinitialize_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_deinitialize_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + smartcard_deinitialize(); + ret = smartcard_deinitialize(); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NOT_INITIALIZED); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_get_version_p + * @since_tizen 3.0 + * @description + */ +int utc_smartcard_smartcard_get_version_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + char *version = NULL; + + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_get_version(&version); + + if (version != NULL) + free(version); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_get_version_n + * @since_tizen 3.0 + * @description + */ +int utc_smartcard_smartcard_get_version_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_get_version(NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_get_readers_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_get_readers_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + int length; + int* readers; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_get_readers(&readers, &length); + // process end + + // if length is 0, assert + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_get_readers_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_get_readers_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_get_readers(NULL, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} diff --git a/unittest/utc-smartcard-session.c b/unittest/utc-smartcard-session.c new file mode 100755 index 0000000..0f488bb --- /dev/null +++ b/unittest/utc-smartcard-session.c @@ -0,0 +1,279 @@ +// +// Copyright (c) 2020 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 "utc-smartcard.h" + +static int session; +static int _init_state = SMARTCARD_ERROR_NONE; + +/** + * @function utc_smartcard_session_startup + * @description Called before each test + * @parameter NA + * @return NA + */ +void utc_smartcard_session_startup(void) +{ + int length; + int* readers; + + _init_state = smartcard_initialize(); + if(SMARTCARD_ERROR_NONE == _init_state) + { + _init_state = smartcard_get_readers(&readers, &length); + if(SMARTCARD_ERROR_NONE == _init_state && length > 0) + { + _init_state = smartcard_reader_open_session(readers[0], &session); + if(_init_state != SMARTCARD_ERROR_NONE || session == 0) + _init_state = SMARTCARD_ERROR_GENERAL; + } + else + { + _init_state = SMARTCARD_ERROR_GENERAL; + } + } +} + +/** + * @function utc_smartcard_session_cleanup + * @description Called after each test + * @parameter NA + * @return NA + */ +void utc_smartcard_session_cleanup(void) +{ + smartcard_deinitialize(); +} + +/** + * @testcase utc_smartcard_smartcard_session_get_reader_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_get_reader_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + int reader; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_get_reader(session, &reader); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_get_reader_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_get_reader_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_get_reader(0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_get_atr_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_get_atr_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + int length; + unsigned char* atr = NULL; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_get_atr(session, &atr, &length); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_get_atr_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_get_atr_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_get_atr(0, NULL, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_close_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_close_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_close(session); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_close_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_close_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_close(0); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_is_closed_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_is_closed_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + bool is_closed; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_is_closed(session, &is_closed); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_is_closed_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_is_closed_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_is_closed(0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_close_channels_p + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_close_channels_p(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_close_channels(session); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_NONE); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_close_channels_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_close_channels_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_close_channels(0); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_open_basic_channel_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_open_basic_channel_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_open_basic_channel(0, NULL, 0, 0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} + +/** + * @testcase utc_smartcard_smartcard_session_open_logical_channel_n + * @since_tizen 2.3 + * @description + */ +int utc_smartcard_smartcard_session_open_logical_channel_n(void) +{ + int ret = SMARTCARD_ERROR_NONE; + SMARTCARD_ASSERT(_init_state, SMARTCARD_ERROR_NONE); + + // process start + ret = smartcard_session_open_logical_channel(0, NULL, 0, 0, NULL); + // process end + + SMARTCARD_ASSERT(ret, SMARTCARD_ERROR_INVALID_PARAMETER); + return 0; +} diff --git a/unittest/utc-smartcard.c b/unittest/utc-smartcard.c new file mode 100755 index 0000000..f0cb6d7 --- /dev/null +++ b/unittest/utc-smartcard.c @@ -0,0 +1,39 @@ +// +// Copyright (c) 2020 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 "utc-smartcard.h" +#include + +#define SE_FEATURE "http://tizen.org/feature/network.secure_element" +#define SE_UICC_FEATURE "http://tizen.org/feature/network.secure_element.uicc" +#define SE_ESE_FEATURE "http://tizen.org/feature/network.secure_element.ese" + +bool _is_support_smartcard() +{ + bool ret = false; + bool is_supported_se = false; + bool is_supported_se_uicc = false; + bool is_supported_se_ese = false; + + system_info_get_platform_bool(SE_FEATURE, &is_supported_se); + system_info_get_platform_bool(SE_UICC_FEATURE, &is_supported_se_uicc); + system_info_get_platform_bool(SE_ESE_FEATURE, &is_supported_se_ese); + + if(is_supported_se && (is_supported_se_uicc || is_supported_se_ese)) + ret = true; + + return ret; +} diff --git a/unittest/utc-smartcard.h b/unittest/utc-smartcard.h new file mode 100755 index 0000000..0fde84b --- /dev/null +++ b/unittest/utc-smartcard.h @@ -0,0 +1,40 @@ +// +// Copyright (c) 2020 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 __UTC_SMARTCARD_H__ +#define __UTC_SMARTCARD_H__ + +#include "assert_local.h" +#include + +//& set: Smartcard +bool _is_support_smartcard(); + +#define SMARTCARD_ASSERT(ret, errno) \ +do{\ + { \ + if(_is_support_smartcard() == false) \ + { \ + assert_eq(ret, SMARTCARD_ERROR_NOT_SUPPORTED); \ + } \ + else \ + { \ + assert_eq(ret, errno); \ + } \ + } \ +}while(0); + +#endif -- 2.34.1