Skip to content

Commit

Permalink
Merge pull request #537 from xuzhenbao/rsa_shm_unit_test
Browse files Browse the repository at this point in the history
Add unit tests for rsa_shm and rsa_json_rpc
  • Loading branch information
xuzhenbao committed May 4, 2023
2 parents 19529d7 + 8f1f2e2 commit c0666d0
Show file tree
Hide file tree
Showing 86 changed files with 5,592 additions and 1,068 deletions.
48 changes: 25 additions & 23 deletions bundles/remote_services/discovery_zeroconf/gtest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -40,31 +40,33 @@ target_compile_definitions(integration_test_discovery_zeroconf PRIVATE -DDISCOVE
add_test(NAME run_integration_test_discovery_zeroconf COMMAND integration_test_discovery_zeroconf)
setup_target_for_coverage(integration_test_discovery_zeroconf SCAN_DIR ..)

####unit test
add_executable(unit_test_discovery_zeroconf
src/DiscoveryZeroconfAnnouncerTestSuite.cc
src/DiscoveryZeroconfWatcherTestSuite.cc
src/DiscoveryZeroconfActivatorTestSuite.cc
)
if (LINKER_WRAP_SUPPORTED)
####unit test
add_executable(unit_test_discovery_zeroconf
src/DiscoveryZeroconfAnnouncerTestSuite.cc
src/DiscoveryZeroconfWatcherTestSuite.cc
src/DiscoveryZeroconfActivatorTestSuite.cc
)

celix_deprecated_utils_headers(unit_test_discovery_zeroconf)
celix_deprecated_utils_headers(unit_test_discovery_zeroconf)

target_link_libraries(unit_test_discovery_zeroconf PRIVATE
rsa_discovery_zeroconf_cut
Celix::rsa_common
Celix::c_rsa_spi
Celix::framework
Celix::threads_ei
Celix::eventfd_ei
Celix::bundle_ctx_ei
Celix::mdnsresponder_ei
Celix::malloc_ei
GTest::gtest
GTest::gtest_main
)
target_link_libraries(unit_test_discovery_zeroconf PRIVATE
rsa_discovery_zeroconf_cut
Celix::rsa_common
Celix::c_rsa_spi
Celix::framework
Celix::threads_ei
Celix::eventfd_ei
Celix::bundle_ctx_ei
Celix::mdnsresponder_ei
Celix::malloc_ei
GTest::gtest
GTest::gtest_main
)

target_compile_definitions(unit_test_discovery_zeroconf PRIVATE -DMDNSD="${DNSSD_LIB_DIRS}/../bin/mdnsd")
target_compile_definitions(unit_test_discovery_zeroconf PRIVATE -DMDNSD="${DNSSD_LIB_DIRS}/../bin/mdnsd")


add_test(NAME run_unit_test_discovery_zeroconf COMMAND sudo $<TARGET_FILE:unit_test_discovery_zeroconf>)
setup_target_for_coverage(unit_test_discovery_zeroconf SCAN_DIR ..)
add_test(NAME run_unit_test_discovery_zeroconf COMMAND sudo $<TARGET_FILE:unit_test_discovery_zeroconf>)
setup_target_for_coverage(unit_test_discovery_zeroconf SCAN_DIR ..)
endif ()
Original file line number Diff line number Diff line change
Expand Up @@ -17,39 +17,48 @@

find_package(libuuid REQUIRED)

set(RSA_SHM_SRC
src/rsa_shm_impl.c
src/rsa_shm_activator.c
src/rsa_shm_server.c
src/rsa_shm_client.c
src/rsa_shm_export_registration.c
src/rsa_shm_import_registration.c
)

set(RSA_SHM_DEPS
Celix::c_rsa_spi
Celix::rsa_common
Celix::log_helper
Celix::framework
Celix::thpool
Celix::shm_pool
libuuid::libuuid
)

add_celix_bundle(rsa_shm
VERSION 1.0.0
SYMBOLIC_NAME "apache_celix_remote_service_admin_shm_v2"
NAME "Apache Celix Remote Service Admin SHM V2"
GROUP "Celix/RSA"
SOURCES
src/rsa_shm_impl.c
src/rsa_shm_activator.c
src/rsa_shm_server.c
src/rsa_shm_client.c
src/rsa_shm_export_registration.c
src/rsa_shm_import_registration.c
${RSA_SHM_SRC}
)

celix_deprecated_utils_headers(rsa_shm)
celix_deprecated_framework_headers(rsa_shm)
target_include_directories(rsa_shm PRIVATE src)


target_link_libraries(rsa_shm PRIVATE
Celix::c_rsa_spi
Celix::rsa_common
Celix::log_helper
Celix::framework
Celix::thpool
Celix::shm_pool
libuuid::libuuid
)
target_link_libraries(rsa_shm PRIVATE ${RSA_SHM_DEPS})

install_celix_bundle(rsa_shm EXPORT celix COMPONENT rsa)
add_library(Celix::rsa_shm ALIAS rsa_shm)

if (ENABLE_TESTING)
add_library(rsa_shm_cut STATIC ${RSA_SHM_SRC})
celix_deprecated_utils_headers(rsa_shm_cut)
target_include_directories(rsa_shm_cut PUBLIC src)
target_link_libraries(rsa_shm_cut PUBLIC ${RSA_SHM_DEPS})
add_subdirectory(gtest)
endif()

Original file line number Diff line number Diff line change
Expand Up @@ -15,45 +15,73 @@
# specific language governing permissions and limitations
# under the License.

find_package(libuuid REQUIRED)

add_executable(test_rsa_shm
src/RsaShmActivatorTestSuite.cc
src/RsaShmTestSuite.cc
src/RsaShmClientServerTestSuite.cc
####integration test
add_executable(integration_test_rsa_shm
src/RsaShmIntegrationTestSuite.cc
)

target_include_directories(test_rsa_shm PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../src)
celix_deprecated_utils_headers(test_rsa_shm)
celix_deprecated_framework_headers(test_rsa_shm)
celix_deprecated_utils_headers(integration_test_rsa_shm)
celix_deprecated_framework_headers(integration_test_rsa_shm)

target_link_libraries(test_rsa_shm PRIVATE
target_link_libraries(integration_test_rsa_shm PRIVATE
Celix::c_rsa_spi
calculator_api
Celix::shell_api
Celix::framework
Celix::dfi
libuuid::libuuid
GTest::gtest
GTest::gtest_main
)

celix_get_bundle_file(Celix::rsa_shm RSA_SHM_BUNDLE_FILE)
target_compile_definitions(test_rsa_shm PRIVATE -DRSA_SHM_BUNDLE="${RSA_SHM_BUNDLE_FILE}")
celix_get_bundle_file(Celix::rsa_json_rpc RSA_RPC_BUNDLE_FILE)
target_compile_definitions(test_rsa_shm PRIVATE -DRSA_RPC_BUNDLE="${RSA_RPC_BUNDLE_FILE}")
celix_get_bundle_file(calculator_shell CONSUMER_BUNDLE_FILE)
target_compile_definitions(test_rsa_shm PRIVATE -DCONSUMER_BUNDLE="${CONSUMER_BUNDLE_FILE}")
celix_get_bundle_file(calculator PROVIDER_BUNDLE_FILE)
target_compile_definitions(test_rsa_shm PRIVATE -DPROVIDER_BUNDLE="${PROVIDER_BUNDLE_FILE}")
celix_get_bundle_file(Celix::rsa_topology_manager RSA_TOPOLOGY_MANAGER_BUNDLE_FILE)
celix_get_bundle_file(Celix::rsa_discovery RSA_DISCOVERY_BUNDLE_FILE)
target_compile_definitions(integration_test_rsa_shm PRIVATE -DRSA_SHM_BUNDLE="${RSA_SHM_BUNDLE_FILE}")


add_celix_bundle_dependencies(integration_test_rsa_shm Celix::rsa_shm)

add_test(NAME run_integration_test_rsa_shm COMMAND integration_test_rsa_shm)
setup_target_for_coverage(integration_test_rsa_shm SCAN_DIR ..)

if (LINKER_WRAP_SUPPORTED)
####unit test
add_executable(unit_test_rsa_shm
src/RsaShmImplUnitTestSuite.cc
src/RsaShmExportRegistrationUnitTestSuite.cc
src/RsaShmImportRegistrationUnitTestSuite.cc
src/RsaShmClientServerUnitTestSuite.cc
src/RsaShmActivatorUnitTestSuite.cc
src/thpool_ei.cc
)

target_link_libraries(unit_test_rsa_shm PRIVATE
rsa_shm_cut
Celix::c_rsa_spi
Celix::rsa_common
Celix::log_helper
Celix::framework
Celix::threads_ei
Celix::bundle_ctx_ei
Celix::malloc_ei
Celix::asprintf_ei
Celix::utils_ei
Celix::socket_ei
Celix::stdio_ei
Celix::pthread_ei
Celix::log_helper_ei
GTest::gtest
GTest::gtest_main
)

target_link_options(unit_test_rsa_shm PRIVATE
LINKER:--wrap,thpool_init
LINKER:--wrap,thpool_add_work
)

configure_file(resources/client.properties.in client.properties)
configure_file(resources/server.properties.in server.properties)
target_compile_definitions(unit_test_rsa_shm PRIVATE -DRESOURCES_DIR="${CMAKE_CURRENT_LIST_DIR}/resources")
celix_get_bundle_file(Celix::rsa_json_rpc RSA_JSON_RPC_BUNDLE_FILE)
target_compile_definitions(unit_test_rsa_shm PRIVATE -DRSA_JSON_RPC_BUNDLE="${RSA_JSON_RPC_BUNDLE_FILE}")

add_celix_bundle_dependencies(unit_test_rsa_shm Celix::rsa_json_rpc)

add_celix_bundle_dependencies(test_rsa_shm Celix::rsa_shm Celix::rsa_json_rpc calculator_shell calculator)
celix_deprecated_utils_headers(unit_test_rsa_shm)

add_test(NAME run_test_rsa_shm COMMAND test_rsa_shm)
setup_target_for_coverage(test_rsa_shm SCAN_DIR ..)
add_test(NAME run_unit_test_rsa_shm COMMAND unit_test_rsa_shm)
setup_target_for_coverage(unit_test_rsa_shm SCAN_DIR ..)
endif ()
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
:header
type=interface
name=calculator
version=1.0.0
:annotations
classname=org.test.Calculator
:types
:methods
add(DD)D=add(#am=handle;PDD#am=pre;*D)N
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 "rsa_shm_impl.h"
#include "remote_service_admin.h"
#include "celix_api.h"
#include "celix_log_helper_ei.h"
#include "malloc_ei.h"
#include "celix_bundle_context_ei.h"
#include <gtest/gtest.h>

class RsaShmActivatorUnitTestSuite : public ::testing::Test {
public:
RsaShmActivatorUnitTestSuite() {
auto* props = celix_properties_create();
celix_properties_set(props, CELIX_FRAMEWORK_FRAMEWORK_STORAGE_CLEAN_NAME, "onFirstInit");
celix_properties_set(props, OSGI_FRAMEWORK_FRAMEWORK_STORAGE, ".rsa_shm_cache");
auto* fwPtr = celix_frameworkFactory_createFramework(props);
auto* ctxPtr = celix_framework_getFrameworkContext(fwPtr);
fw = std::shared_ptr<celix_framework_t>{fwPtr, [](auto* f) {celix_frameworkFactory_destroyFramework(f);}};
ctx = std::shared_ptr<celix_bundle_context_t>{ctxPtr, [](auto*){/*nop*/}};
}

~RsaShmActivatorUnitTestSuite() {
celix_ei_expect_celix_logHelper_create(nullptr, 0, nullptr);
celix_ei_expect_calloc(nullptr, 0, nullptr);
celix_ei_expect_celix_bundleContext_registerServiceAsync(nullptr, 0, 0);
}


std::shared_ptr<celix_framework_t> fw{};
std::shared_ptr<celix_bundle_context_t> ctx{};
};

TEST_F(RsaShmActivatorUnitTestSuite, RsaShmActivatorStart) {
void *userData = nullptr;
auto status = celix_bundleActivator_create(ctx.get(), &userData);
EXPECT_EQ(status, CELIX_SUCCESS);
status = celix_bundleActivator_start(userData, ctx.get());
EXPECT_EQ(status, CELIX_SUCCESS);

bool found = celix_bundleContext_findService(ctx.get(), OSGI_RSA_REMOTE_SERVICE_ADMIN);
EXPECT_TRUE(found);

status = celix_bundleActivator_stop(userData, ctx.get());
EXPECT_EQ(status, CELIX_SUCCESS);
status = celix_bundleActivator_destroy(userData, ctx.get());
EXPECT_EQ(status, CELIX_SUCCESS);
}

TEST_F(RsaShmActivatorUnitTestSuite, RsaShmActivatorStartWithLogHelperError) {
celix_ei_expect_celix_logHelper_create(nullptr, 0, nullptr);

void *userData = nullptr;
auto status = celix_bundleActivator_create(ctx.get(), &userData);
EXPECT_EQ(status, CELIX_SUCCESS);
celix_ei_expect_celix_logHelper_create((void*)&celix_bundleActivator_start, 1, nullptr);
status = celix_bundleActivator_start(userData, ctx.get());
EXPECT_EQ(status, CELIX_BUNDLE_EXCEPTION);

status = celix_bundleActivator_destroy(userData, ctx.get());
EXPECT_EQ(status, CELIX_SUCCESS);
}

TEST_F(RsaShmActivatorUnitTestSuite, RsaShmActivatorStartWithCreatingRsaError) {
void *userData = nullptr;
auto status = celix_bundleActivator_create(ctx.get(), &userData);
EXPECT_EQ(status, CELIX_SUCCESS);
celix_ei_expect_calloc((void*)&rsaShm_create, 0, nullptr);
status = celix_bundleActivator_start(userData, ctx.get());
EXPECT_EQ(status, CELIX_ENOMEM);

status = celix_bundleActivator_destroy(userData, ctx.get());
EXPECT_EQ(status, CELIX_SUCCESS);
}

TEST_F(RsaShmActivatorUnitTestSuite, RsaShmActivatorStartWithRegisteringRsaServiceError) {
void *userData = nullptr;
auto status = celix_bundleActivator_create(ctx.get(), &userData);
EXPECT_EQ(status, CELIX_SUCCESS);
celix_ei_expect_celix_bundleContext_registerServiceAsync((void*)&celix_bundleActivator_start, 1, -1);
status = celix_bundleActivator_start(userData, ctx.get());
EXPECT_EQ(status, CELIX_BUNDLE_EXCEPTION);

status = celix_bundleActivator_destroy(userData, ctx.get());
EXPECT_EQ(status, CELIX_SUCCESS);
}
Loading

0 comments on commit c0666d0

Please sign in to comment.