Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/509 remove pubsub #703

Merged
merged 7 commits into from
Dec 25, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/coverity-scan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ jobs:
cmake \
libffi-dev \
libxml2-dev \
libczmq-dev \
libcpputest-dev \
rapidjson-dev \
libavahi-compat-libdnssd-dev \
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/macos.yml
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ jobs:
uses: actions/[email protected]
- name: Install dependencies
run: |
brew install lcov zeromq czmq cpputest jansson rapidjson libzip ccache
brew install lcov cpputest jansson rapidjson libzip ccache
- name: Prepare ccache timestamp
id: ccache_cache_timestamp
run: |
Expand Down
1 change: 0 additions & 1 deletion .github/workflows/ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ jobs:
cmake \
libffi-dev \
libxml2-dev \
libczmq-dev \
libcpputest-dev \
rapidjson-dev \
libavahi-compat-libdnssd-dev \
Expand Down
1 change: 0 additions & 1 deletion bundles/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,5 @@ add_subdirectory(http_admin)
add_subdirectory(logging)
add_subdirectory(shell)
add_subdirectory(remote_services)
add_subdirectory(pubsub)
add_subdirectory(cxx_remote_services)
add_subdirectory(components_ready_check)
81 changes: 28 additions & 53 deletions bundles/cxx_remote_services/integration/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,8 @@ if (CXX_RSA_INTEGRATION)
add_celix_bundle(TestExportImportRemoteServiceFactory
SOURCES src/TestExportImportRemoteServiceFactory.cc
)
target_link_libraries(TestExportImportRemoteServiceFactory PRIVATE Celix::rsa_spi Celix::pubsub_api Celix::Promises Celix::PushStreams Celix::log_helper)
target_link_libraries(TestExportImportRemoteServiceFactory PRIVATE Celix::rsa_spi Celix::Promises Celix::PushStreams Celix::log_helper)
target_include_directories(TestExportImportRemoteServiceFactory PRIVATE include)
celix_bundle_files(TestExportImportRemoteServiceFactory
resources/Calculator$add$Invoke.descriptor
resources/Calculator$result$Event.descriptor
resources/Calculator$add$Return.descriptor
DESTINATION "META-INF/descriptors"
)

add_celix_bundle(CalculatorProvider
SOURCES src/CalculatorProvider.cc
Expand All @@ -47,55 +41,36 @@ if (CXX_RSA_INTEGRATION)
endif()

################# Integration examples ##################################
add_celix_container(RemoteCalculatorProvider
CXX
GROUP rsa
PROPERTIES
CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=debug
BUNDLES
Celix::ShellCxx
Celix::shell_tui

if (BUILD_LAUNCHER)
add_celix_container(RemoteCalculatorProvider
LAUNCHER Celix::launcher
GROUP rsa
USE_CONFIG
PROPERTIES
CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=trace
BUNDLES
Celix::ShellCxx
Celix::shell_tui

#Pubsub needed for remote services on pubsub
Celix::celix_pubsub_serializer_json
Celix::celix_pubsub_topology_manager
Celix::celix_pubsub_admin_zmq
Celix::celix_pubsub_protocol_wire_v2
Celix::celix_pubsub_discovery_etcd

#Remote Services
Celix::RemoteServiceAdmin
TestExportImportRemoteServiceFactory #needed to be able to create a ExportedService for ICalculator

CalculatorProvider
)
#Remote Services
Celix::RemoteServiceAdmin
TestExportImportRemoteServiceFactory #needed to be able to create a ExportedService for ICalculator

add_celix_container(RemoteCalculatorConsumer
LAUNCHER Celix::launcher
GROUP rsa
USE_CONFIG
PROPERTIES
CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=trace
BUNDLES
Celix::ShellCxx
Celix::shell_tui
CalculatorProvider
)

#Pubsub needed for remote services on pubsub
Celix::celix_pubsub_serializer_json
Celix::celix_pubsub_topology_manager
Celix::celix_pubsub_discovery_etcd
Celix::celix_pubsub_admin_zmq
Celix::celix_pubsub_protocol_wire_v2
add_celix_container(RemoteCalculatorConsumer
CXX
GROUP rsa
PROPERTIES
CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL=debug
BUNDLES
Celix::ShellCxx
Celix::shell_tui

#Remote Services
Celix::RsaConfiguredDiscovery
Celix::RemoteServiceAdmin
TestExportImportRemoteServiceFactory #needed to be able to create a ExportedService for ICalculator
#Remote Services
Celix::RsaConfiguredDiscovery
Celix::RemoteServiceAdmin
TestExportImportRemoteServiceFactory #needed to be able to create a ExportedService for ICalculator

CalculatorConsumer
)
endif ()
CalculatorConsumer
)
endif()
8 changes: 8 additions & 0 deletions bundles/cxx_remote_services/integration/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# C++ Remote Service Amdatu Integration

This project part tests the integration of the C++ Remote Service Admin implementation with the
C++ configuration-based remote service discovery.

Because the C++ Remote Service Admin is based on export and import service factories and does not directly
implement a transportation or serializer technology, the integration tests are based on a simple implementation of
inter process communication message queue (IPC mq) for transportation and a simple memcpy for serialization.
15 changes: 0 additions & 15 deletions bundles/cxx_remote_services/integration/gtest/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,13 @@ target_link_libraries(test_cxx_remote_services_integration PRIVATE Celix::framew
target_include_directories(test_cxx_remote_services_integration PRIVATE ../include) #Add ICalculator

add_celix_bundle_dependencies(test_cxx_remote_services_integration
Celix::celix_pubsub_serializer_json
Celix::celix_pubsub_topology_manager
Celix::celix_pubsub_admin_zmq
Celix::celix_pubsub_protocol_wire_v2
Celix::RsaConfiguredDiscovery
Celix::RemoteServiceAdmin
TestExportImportRemoteServiceFactory
CalculatorProvider
CalculatorConsumer
)

celix_get_bundle_file(Celix::celix_pubsub_serializer_json PS_SER_BUNDLE_LOC)
target_compile_definitions(test_cxx_remote_services_integration PRIVATE PS_SER_BUNDLE_LOC="${PS_SER_BUNDLE_LOC}")

celix_get_bundle_file(Celix::celix_pubsub_topology_manager PS_PSTM_BUNDLE_LOC)
target_compile_definitions(test_cxx_remote_services_integration PRIVATE PS_PSTM_BUNDLE_LOC="${PS_PSTM_BUNDLE_LOC}")

celix_get_bundle_file(Celix::celix_pubsub_admin_zmq PS_PSA_BUNDLE_LOC)
target_compile_definitions(test_cxx_remote_services_integration PRIVATE PS_PSA_BUNDLE_LOC="${PS_PSA_BUNDLE_LOC}")

celix_get_bundle_file(Celix::celix_pubsub_protocol_wire_v2 PS_WIRE_BUNDLE_LOC)
target_compile_definitions(test_cxx_remote_services_integration PRIVATE PS_WIRE_BUNDLE_LOC="${PS_WIRE_BUNDLE_LOC}")

celix_get_bundle_file(Celix::RsaConfiguredDiscovery RS_DISCOVERY_BUNDLE_LOC)
target_compile_definitions(test_cxx_remote_services_integration PRIVATE RS_DISCOVERY_BUNDLE_LOC="${RS_DISCOVERY_BUNDLE_LOC}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,36 +26,23 @@
class RemoteServicesIntegrationTestSuite : public ::testing::Test {
public:
RemoteServicesIntegrationTestSuite() {
auto pubsubTestReturnIpc = std::string{"ipc:///tmp/pubsub-test-return"};
auto pubsubTestInvokeIpc = std::string{"ipc:///tmp/pubsub-test-invoke"};

celix::Properties clientConfig{
{"CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL", "info"},
{celix::FRAMEWORK_CACHE_DIR, ".clientCache"},
//Static configuration to let the pubsub zmq operate without discovery
{"PSA_ZMQ_STATIC_BIND_URL_FOR_test_invoke_default", pubsubTestInvokeIpc},
{"PSA_ZMQ_STATIC_CONNECT_URL_FOR_test_return_default", pubsubTestReturnIpc }
};
clientFw = celix::createFramework(clientConfig);
clientCtx = clientFw->getFrameworkBundleContext();

celix::Properties serverConfig{
{"CELIX_LOGGING_DEFAULT_ACTIVE_LOG_LEVEL", "info"},
{celix::FRAMEWORK_CACHE_DIR, ".serverCache"},
//Static configuration to let the pubsub zmq operate without discovery
{"PSA_ZMQ_STATIC_BIND_URL_FOR_test_return_default", pubsubTestReturnIpc },
{"PSA_ZMQ_STATIC_CONNECT_URL_FOR_test_invoke_default", pubsubTestInvokeIpc }
};
serverFw = celix::createFramework(serverConfig);
serverCtx = serverFw->getFrameworkBundleContext();
}

static void installSharedBundles(std::shared_ptr<celix::BundleContext>& ctx) {
auto sharedBundles = {
PS_SER_BUNDLE_LOC,
PS_PSTM_BUNDLE_LOC,
PS_PSA_BUNDLE_LOC,
PS_WIRE_BUNDLE_LOC,
RS_DISCOVERY_BUNDLE_LOC,
RS_FACTORY_BUNDLE_LOC ,
RS_RSA_BUNDLE_LOC};
Expand Down Expand Up @@ -87,9 +74,6 @@ class RemoteServicesIntegrationTestSuite : public ::testing::Test {
}

void invokeRemoteCalcService() {
installProviderBundles();
installConsumerBundles();

//If a calculator provider bundle is installed I expect a exported calculator interface
auto count = serverCtx->useService<ICalculator>()
.setFilter("(service.exported.interfaces=*)")
Expand All @@ -111,8 +95,8 @@ class RemoteServicesIntegrationTestSuite : public ::testing::Test {

/*
* Testing the remote service in a while loop till it is successful or 10 seconds has passed.
* Note that because pubsub does not guarantee a connection when used, it is possible - and likely -
* that the first remote test iteration fails due to not yet completely connected pubsub.
* Note that because mq does not guarantee a connection when used, it is possible - and likely -
* that the first remote test iteration fails due to not yet completely connected mq.
*/
auto start = std::chrono::system_clock::now();
auto now = std::chrono::system_clock::now();
Expand Down Expand Up @@ -169,5 +153,7 @@ TEST_F(RemoteServicesIntegrationTestSuite, StartStopFrameworks) {
}

TEST_F(RemoteServicesIntegrationTestSuite, InvokeRemoteCalcService) {
installProviderBundles();
installConsumerBundles();
invokeRemoteCalcService();
}

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,12 @@
"endpoint.id": "id-01",
"service.imported": true,
"service.imported.configs": [
"pubsub"
"ipc-mq"
],
"service.exported.interfaces": "ICalculator",
"endpoint.objectClass": "ICalculator",
"endpoint.topic": "test",
"endpoint.scope": "default"
"endpoint.client.to.provider.channel.id": "1234",
"endpoint.provider.to.client.channel.id": "1235"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,6 @@ class CalculatorConsumer final : public celix::IShellCommand {
});
counter++;
}

private:
std::shared_ptr<ICalculator> calculator{};
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ class CalculatorImpl final : public ICalculator {
while(!stopThread) {
ses->publish((double)counter);
counter++;
std::this_thread::sleep_for(std::chrono::milliseconds{100});
std::this_thread::sleep_for(std::chrono::milliseconds{5000});
}
});
return CELIX_SUCCESS;
Expand Down Expand Up @@ -98,8 +98,8 @@ class CalculatorProviderActivator {
.setCallbacks(&CalculatorImpl::setPushStreamProvider);
cmp.createProvidedService<ICalculator>()
.addProperty("service.exported.interfaces", celix::typeName<ICalculator>())
.addProperty("endpoint.topic", "test")
.addProperty("endpoint.scope", "default")
.addProperty("endpoint.client.to.provider.channel.id", "1234")
.addProperty("endpoint.provider.to.client.channel.id", "1235")
.addProperty("service.exported.intents", "osgi.async");

cmp.setCallbacks(&CalculatorImpl::init, &CalculatorImpl::start, &CalculatorImpl::stop, &CalculatorImpl::deinit);
Expand Down
Loading
Loading