diff options
Diffstat (limited to 'test/restart_routing_tests')
10 files changed, 831 insertions, 0 deletions
diff --git a/test/restart_routing_tests/restart_routing_test_autoconfig.json b/test/restart_routing_tests/restart_routing_test_autoconfig.json new file mode 100644 index 0000000..f50dba7 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_autoconfig.json @@ -0,0 +1,24 @@ +{ + "unicast" : "127.0.0.1", + "netmask" : "255.255.255.0", + "logging" : + { + "level" : "warning", + "console" : "true", + "file" : + { + "enable" : "true", + "path" : "/var/log/vsomeip.log" + }, + + "dlt" : "true" + }, + + "service-discovery" : + { + "enable" : "false", + "multicast" : "224.0.0.1", + "port" : "30491", + "protocol" : "udp" + } +} diff --git a/test/restart_routing_tests/restart_routing_test_client.cpp b/test/restart_routing_tests/restart_routing_test_client.cpp new file mode 100644 index 0000000..a8c0acc --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_client.cpp @@ -0,0 +1,158 @@ +// Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "restart_routing_test_client.hpp" + +routing_restart_test_client::routing_restart_test_client() + : app_(vsomeip::runtime::get()->create_application()), + is_available_(false), + sender_(std::bind(&routing_restart_test_client::run, this)), + received_responses_(0) { + +} + +bool routing_restart_test_client::init() { + if (!app_->init()) { + ADD_FAILURE() << "Couldn't initialize application"; + return false; + } + + app_->register_state_handler( + std::bind(&routing_restart_test_client::on_state, this, + std::placeholders::_1)); + + app_->register_message_handler(vsomeip::ANY_SERVICE, + vsomeip_test::TEST_SERVICE_INSTANCE_ID, vsomeip::ANY_METHOD, + std::bind(&routing_restart_test_client::on_message, this, + std::placeholders::_1)); + + app_->register_availability_handler(vsomeip_test::TEST_SERVICE_SERVICE_ID, + vsomeip_test::TEST_SERVICE_INSTANCE_ID, + std::bind(&routing_restart_test_client::on_availability, this, + std::placeholders::_1, std::placeholders::_2, + std::placeholders::_3)); + return true; +} + +void routing_restart_test_client::start() { + VSOMEIP_INFO << "Starting..."; + + app_->start(); +} + +void routing_restart_test_client::stop() { + VSOMEIP_INFO << "Stopping..."; + + shutdown_service(); + + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + + app_->clear_all_handler(); + app_->stop(); +} + +void routing_restart_test_client::on_state(vsomeip::state_type_e _state) { + if(_state == vsomeip::state_type_e::ST_REGISTERED) { + app_->request_service(vsomeip_test::TEST_SERVICE_SERVICE_ID, + vsomeip_test::TEST_SERVICE_INSTANCE_ID, false); + } +} + +void routing_restart_test_client::on_availability(vsomeip::service_t _service, + vsomeip::instance_t _instance, bool _is_available) { + + VSOMEIP_INFO << std::hex << "Client 0x" << app_->get_client() + << " : Service [" << std::setw(4) << std::setfill('0') << std::hex + << _service << "." << _instance << "] is " + << (_is_available ? "available." : "NOT available."); + + if(vsomeip_test::TEST_SERVICE_SERVICE_ID == _service + && vsomeip_test::TEST_SERVICE_INSTANCE_ID == _instance) { + std::unique_lock<std::mutex> its_lock(mutex_); + if(is_available_ && !_is_available) { + is_available_ = false; + } + else if(_is_available && !is_available_) { + is_available_ = true; + condition_.notify_one(); + } + } +} + +void routing_restart_test_client::on_message(const std::shared_ptr<vsomeip::message> &_response) { + VSOMEIP_INFO << "Received a response from Service [" + << std::setw(4) << std::setfill('0') << std::hex << _response->get_service() + << "." + << std::setw(4) << std::setfill('0') << std::hex << _response->get_instance() + << "] to Client/Session [" + << std::setw(4) << std::setfill('0') << std::hex << _response->get_client() + << "/" + << std::setw(4) << std::setfill('0') << std::hex << _response->get_session() + << "]"; + + if (_response->get_service() == vsomeip_test::TEST_SERVICE_SERVICE_ID && + _response->get_instance() == vsomeip_test::TEST_SERVICE_INSTANCE_ID) { + received_responses_++; + if (received_responses_ == vsomeip_test::NUMBER_OF_MESSAGES_TO_SEND_ROUTING_RESTART_TESTS) { + VSOMEIP_WARNING << std::hex << app_->get_client() + << ": Received all messages ~> going down!"; + } + } +} + +void routing_restart_test_client::run() { + for (uint32_t i = 0; i < vsomeip_test::NUMBER_OF_MESSAGES_TO_SEND_ROUTING_RESTART_TESTS; ++i) { + { + std::unique_lock<std::mutex> its_lock(mutex_); + while (!is_available_) + { + condition_.wait(its_lock); + } + } + + auto request = vsomeip::runtime::get()->create_request(false); + request->set_service(vsomeip_test::TEST_SERVICE_SERVICE_ID); + request->set_instance(vsomeip_test::TEST_SERVICE_INSTANCE_ID); + request->set_method(vsomeip_test::TEST_SERVICE_METHOD_ID); + app_->send(request, true); + + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + } + + std::this_thread::sleep_for(std::chrono::milliseconds(250)); + EXPECT_EQ(vsomeip_test::NUMBER_OF_MESSAGES_TO_SEND_ROUTING_RESTART_TESTS, + received_responses_); + + stop(); +} + +void routing_restart_test_client::join_sender_thread() +{ + if (sender_.joinable()) { + sender_.join(); + } +} + +void routing_restart_test_client::shutdown_service() { + auto request = vsomeip::runtime::get()->create_request(false); + request->set_service(vsomeip_test::TEST_SERVICE_SERVICE_ID); + request->set_instance(vsomeip_test::TEST_SERVICE_INSTANCE_ID); + request->set_method(vsomeip_test::TEST_SERVICE_METHOD_ID_SHUTDOWN); + app_->send(request,true); +} + +TEST(someip_restart_routing_test, request_response_over_restart) +{ + routing_restart_test_client test_client; + if (test_client.init()) { + test_client.start(); + test_client.join_sender_thread(); + } +} + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} diff --git a/test/restart_routing_tests/restart_routing_test_client.hpp b/test/restart_routing_tests/restart_routing_test_client.hpp new file mode 100644 index 0000000..fdc56d4 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_client.hpp @@ -0,0 +1,50 @@ + +// Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef RESTART_ROUTING_TEST_CLIENT_HPP +#define RESTART_ROUTING_TEST_CLIENT_HPP + +#include <gtest/gtest.h> + +#include <vsomeip/vsomeip.hpp> + +#include "../someip_test_globals.hpp" + +#include <thread> +#include <mutex> +#include <condition_variable> +#include <atomic> + +class routing_restart_test_client { +public: + routing_restart_test_client(); + bool init(); + void start(); + void stop(); + + void on_state(vsomeip::state_type_e _state); + void on_availability(vsomeip::service_t _service, + vsomeip::instance_t _instance, bool _is_available); + void on_message(const std::shared_ptr<vsomeip::message> &_response); + + void run(); + void join_sender_thread(); + +private: + void shutdown_service(); + + std::shared_ptr<vsomeip::application> app_; + + std::mutex mutex_; + std::condition_variable condition_; + bool is_available_; + + std::thread sender_; + + std::atomic<std::uint32_t> received_responses_; +}; + +#endif // RESTART_ROUTING_TEST_CLIENT_HPP diff --git a/test/restart_routing_tests/restart_routing_test_client.json b/test/restart_routing_tests/restart_routing_test_client.json new file mode 100644 index 0000000..0d901d8 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_client.json @@ -0,0 +1,48 @@ +{ + "unicast" : "127.0.0.1", + "netmask" : "255.255.255.0", + "logging" : + { + "level" : "warning", + "console" : "true", + "file" : + { + "enable" : "true", + "path" : "/var/log/vsomeip.log" + }, + + "dlt" : "true" + }, + + "applications" : + [ + { + "name" : "restart_routing_test_client1", + "id" : "0x1343" + }, + { + "name" : "restart_routing_test_client2", + "id" : "0x1344" + }, + { + "name" : "restart_routing_test_client3", + "id" : "0x1345" + }, + { + "name" : "restart_routing_test_client4", + "id" : "0x1346" + } + ], + "services" : + [ + ], + + "routing" : "vsomeipd", + "service-discovery" : + { + "enable" : "false", + "multicast" : "224.0.0.1", + "port" : "30491", + "protocol" : "udp" + } +} diff --git a/test/restart_routing_tests/restart_routing_test_client_start.sh b/test/restart_routing_tests/restart_routing_test_client_start.sh new file mode 100755 index 0000000..de944b9 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_client_start.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client diff --git a/test/restart_routing_tests/restart_routing_test_service.cpp b/test/restart_routing_tests/restart_routing_test_service.cpp new file mode 100644 index 0000000..cf4bba1 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_service.cpp @@ -0,0 +1,133 @@ +// Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include "restart_routing_test_service.hpp" + +routing_restart_test_service::routing_restart_test_service() : + app_(vsomeip::runtime::get()->create_application()), + is_registered_(false), + blocked_(false), + number_of_received_messages_(0), + offer_thread_(std::bind(&routing_restart_test_service::run, this)) { +} + +bool routing_restart_test_service::init() { + std::lock_guard<std::mutex> its_lock(mutex_); + + if (!app_->init()) { + ADD_FAILURE() << "Couldn't initialize application"; + return false; + } + app_->register_message_handler(vsomeip_test::TEST_SERVICE_SERVICE_ID, + vsomeip_test::TEST_SERVICE_INSTANCE_ID, vsomeip_test::TEST_SERVICE_METHOD_ID, + std::bind(&routing_restart_test_service::on_message, this, + std::placeholders::_1)); + + app_->register_message_handler(vsomeip_test::TEST_SERVICE_SERVICE_ID, + vsomeip_test::TEST_SERVICE_INSTANCE_ID, + vsomeip_test::TEST_SERVICE_METHOD_ID_SHUTDOWN, + std::bind(&routing_restart_test_service::on_message_shutdown, this, + std::placeholders::_1)); + + app_->register_state_handler( + std::bind(&routing_restart_test_service::on_state, this, + std::placeholders::_1)); + return true; +} + +void routing_restart_test_service::start() { + VSOMEIP_INFO << "Starting..."; + app_->start(); +} + +void routing_restart_test_service::stop() { + VSOMEIP_INFO << "Stopping..."; + app_->clear_all_handler(); + app_->stop(); +} + +void routing_restart_test_service::join_offer_thread() { + if (offer_thread_.joinable()) { + offer_thread_.join(); + } +} + +void routing_restart_test_service::offer() { + app_->offer_service(vsomeip_test::TEST_SERVICE_SERVICE_ID, vsomeip_test::TEST_SERVICE_INSTANCE_ID); +} + +void routing_restart_test_service::stop_offer() { + app_->stop_offer_service(vsomeip_test::TEST_SERVICE_SERVICE_ID, vsomeip_test::TEST_SERVICE_INSTANCE_ID); +} + +void routing_restart_test_service::on_state(vsomeip::state_type_e _state) { + VSOMEIP_INFO << "Application " << app_->get_name() << " is " + << (_state == vsomeip::state_type_e::ST_REGISTERED ? "registered." : + "deregistered."); + + if(_state == vsomeip::state_type_e::ST_REGISTERED) { + if(!is_registered_) { + is_registered_ = true; + std::lock_guard<std::mutex> its_lock(mutex_); + blocked_ = true; + // "start" the run method thread + condition_.notify_one(); + } + } + else { + is_registered_ = false; + } +} + +void routing_restart_test_service::on_message(const std::shared_ptr<vsomeip::message>& _request) { + ASSERT_EQ(vsomeip_test::TEST_SERVICE_SERVICE_ID, _request->get_service()); + ASSERT_EQ(vsomeip_test::TEST_SERVICE_METHOD_ID, _request->get_method()); + + VSOMEIP_INFO << "Received a message with Client/Session [" << std::setw(4) + << std::setfill('0') << std::hex << _request->get_client() << "/" + << std::setw(4) << std::setfill('0') << std::hex + << _request->get_session() << "]"; + + // send response + std::shared_ptr<vsomeip::message> its_response = + vsomeip::runtime::get()->create_response(_request); + + app_->send(its_response, true); + + number_of_received_messages_++; + if(number_of_received_messages_ == vsomeip_test::NUMBER_OF_MESSAGES_TO_SEND_ROUTING_RESTART_TESTS) { + VSOMEIP_INFO << "Received all messages!"; + } +} + +void routing_restart_test_service::on_message_shutdown( + const std::shared_ptr<vsomeip::message>& _request) { + (void)_request; + VSOMEIP_INFO << "Shutdown method was called, going down now."; + stop(); +} + +void routing_restart_test_service::run() { + std::unique_lock<std::mutex> its_lock(mutex_); + while (!blocked_) + condition_.wait(its_lock); + + offer(); +} + +TEST(someip_restart_routing_test, send_response_for_every_request) { + routing_restart_test_service test_service; + if (test_service.init()) { + test_service.start(); + test_service.join_offer_thread(); + } +} + +#ifndef _WIN32 +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + return RUN_ALL_TESTS(); +} +#endif diff --git a/test/restart_routing_tests/restart_routing_test_service.hpp b/test/restart_routing_tests/restart_routing_test_service.hpp new file mode 100644 index 0000000..3abfe17 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_service.hpp @@ -0,0 +1,44 @@ +// Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef RESTART_ROUTING_TEST_SERVICE_HPP +#define RESTART_ROUTING_TEST_SERVICE_HPP + +#include <gtest/gtest.h> + +#include <vsomeip/vsomeip.hpp> + +#include "../someip_test_globals.hpp" + +#include <thread> +#include <mutex> +#include <condition_variable> + +class routing_restart_test_service { +public: + routing_restart_test_service(); + bool init(); + void start(); + void stop(); + void offer(); + void stop_offer(); + void join_offer_thread(); + void on_state(vsomeip::state_type_e _state); + void on_message(const std::shared_ptr<vsomeip::message> &_request); + void on_message_shutdown(const std::shared_ptr<vsomeip::message> &_request); + void run(); + +private: + std::shared_ptr<vsomeip::application> app_; + bool is_registered_; + + std::mutex mutex_; + std::condition_variable condition_; + bool blocked_; + std::uint32_t number_of_received_messages_; + std::thread offer_thread_; +}; + +#endif // RESTART_ROUTING_TEST_SERVICE_HPP diff --git a/test/restart_routing_tests/restart_routing_test_service.json b/test/restart_routing_tests/restart_routing_test_service.json new file mode 100644 index 0000000..8ff90cb --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_service.json @@ -0,0 +1,44 @@ +{ + "unicast" : "127.0.0.1", + "logging" : + { + "level" : "warning", + "console" : "true", + "file" : + { + "enable" : "false", + "path" : "/tmp/vsomeip.log" + }, + + "dlt" : "false" + }, + + "applications" : + [ + { + "name" : "vsomeipd", + "id" : "0x0815" + }, + { + "name" : "restart_routing_test_service", + "id" : "0x1277" + } + ], + + "services" : + [ + { + "service" : "0x1234", + "instance" : "0x5678" + } + ], + + "routing" : "vsomeipd", + "service-discovery" : + { + "enable" : "false", + "multicast" : "224.0.0.1", + "port" : "30490", + "protocol" : "udp" + } +} diff --git a/test/restart_routing_tests/restart_routing_test_service_start.sh b/test/restart_routing_tests/restart_routing_test_service_start.sh new file mode 100755 index 0000000..b82be7c --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_service_start.sh @@ -0,0 +1,9 @@ +#!/bin/bash +# Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +./restart_routing_test_service diff --git a/test/restart_routing_tests/restart_routing_test_starter.sh b/test/restart_routing_tests/restart_routing_test_starter.sh new file mode 100755 index 0000000..0778e98 --- /dev/null +++ b/test/restart_routing_tests/restart_routing_test_starter.sh @@ -0,0 +1,312 @@ +#!/bin/bash +# Copyright (C) 2015-2017 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +# Purpose: This script is needed to start the client and service with +# one command. This is necessary as ctest - which is used to run the +# tests - isn't able to start two binaries for one testcase. Therefore +# the testcase simply executes this script. This script then runs client +# and service and checks that both exit sucessfully. + +FAIL=0 + +# NOW WITHOUT JSON +echo "----------------------------------------------" +echo "----------------------------------------------" +echo " Run test with auto configuration " +echo "----------------------------------------------" +echo "----------------------------------------------" + +export VSOMEIP_CONFIGURATION=restart_routing_test_autoconfig.json + +../daemon/./vsomeipd & +DAEMON_PID=$! + +sleep 2 + +# Start the service +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +./restart_routing_test_service & +SERIVCE_PID=$! + +# Start the client1 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client1 +./restart_routing_test_client & +CLIENT1_PID=$! + +# Start the client2 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client2 +./restart_routing_test_client & +CLIENT2_PID=$! + +# Start the client3 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client3 +./restart_routing_test_client & +CLIENT3_PID=$! + +# Start the client4 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client4 +./restart_routing_test_client & +CLIENT4_PID=$! + +sleep 2 +echo "----------------------------------------------" +echo " let vsomeipd crash (kill -9) " +echo "----------------------------------------------" +kill -9 $DAEMON_PID +echo "----------------------------------------------" +echo " restart vsomeipd " +echo "----------------------------------------------" +sleep 2 + +../daemon/./vsomeipd & +DAEMON_PID=$! + +wait $SERIVCE_PID || ((FAIL+=1)) +wait $CLIENT1_PID || ((FAIL+=1)) +wait $CLIENT2_PID || ((FAIL+=1)) +wait $CLIENT3_PID || ((FAIL+=1)) +wait $CLIENT4_PID || ((FAIL+=1)) + +kill $DAEMON_PID +wait $DAEMON_PID + +# Check if client and server both exited sucessfully and the service didnt't +# have any open tcp/udp sockets +if [ $FAIL -eq 0 ] +then + echo "Test Succeeded" +else + exit 1 +fi + +# NOW WITHOUT VSOMEIPD +echo "----------------------------------------------" +echo "----------------------------------------------" +echo " Run test with auto configuration no deamon " +echo "----------------------------------------------" +echo "----------------------------------------------" + +sleep 2 + +# Start the service +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +./restart_routing_test_service & +SERIVCE_PID=$! + +# Start the client1 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client1 +./restart_routing_test_client & +CLIENT1_PID=$! + +# Start the client2 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client2 +./restart_routing_test_client & +CLIENT2_PID=$! + +# Start the client3 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client3 +./restart_routing_test_client & +CLIENT3_PID=$! + +# Start the client4 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client4 +./restart_routing_test_client & +CLIENT4_PID=$! + +sleep 2 +echo "----------------------------------------------" +echo " let service (routing) crash (kill -9) " +echo "----------------------------------------------" +kill -9 $SERIVCE_PID +echo "----------------------------------------------" +echo " restart service (routing) " +echo "----------------------------------------------" +sleep 2 + +# Start the service +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +./restart_routing_test_service & +SERIVCE_PID=$! + +wait $SERIVCE_PID || ((FAIL+=1)) +wait $CLIENT1_PID || ((FAIL+=1)) +wait $CLIENT2_PID || ((FAIL+=1)) +wait $CLIENT3_PID || ((FAIL+=1)) +wait $CLIENT4_PID || ((FAIL+=1)) + +# Check if client and server both exited sucessfully and the service didnt't +# have any open tcp/udp sockets +if [ $FAIL -eq 0 ] +then + echo "Test Succeeded" +else + exit 1 +fi + + +echo "----------------------------------------------" +echo "----------------------------------------------" +echo " Run test with json configuration " +echo "----------------------------------------------" +echo "----------------------------------------------" + +sleep 2 + +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +../daemon/./vsomeipd & +DAEMON_PID=$! + +# Start the service +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +./restart_routing_test_service & +SERIVCE_PID=$! + +# Start the client1 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client1 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT1_PID=$! + +# Start the client2 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client2 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT2_PID=$! + +# Start the client3 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client3 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT3_PID=$! + +# Start the client4 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client4 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT4_PID=$! + +sleep 2 +echo "----------------------------------------------" +echo " let vsomeipd crash (kill -9) " +echo "----------------------------------------------" +kill -9 $DAEMON_PID +echo "----------------------------------------------" +echo " restart vsomeipd " +echo "----------------------------------------------" +sleep 2 + +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +../daemon/./vsomeipd & +DAEMON_PID=$! + +wait $SERIVCE_PID || ((FAIL+=1)) +wait $CLIENT1_PID || ((FAIL+=1)) +wait $CLIENT2_PID || ((FAIL+=1)) +wait $CLIENT3_PID || ((FAIL+=1)) +wait $CLIENT4_PID || ((FAIL+=1)) + +kill $DAEMON_PID +wait $DAEMON_PID + +# Check if client and server both exited sucessfully and the service didnt't +# have any open tcp/udp sockets +if [ $FAIL -eq 0 ] +then + echo "Test Succeeded" +else + exit 1 +fi + +echo "----------------------------------------------" +echo "----------------------------------------------" +echo "Run test with json configuration + kill service" +echo "----------------------------------------------" +echo "----------------------------------------------" + +sleep 2 + +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +../daemon/./vsomeipd & +DAEMON_PID=$! + +# Start the service +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +./restart_routing_test_service & +SERIVCE_PID=$! + +# Start the client1 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client1 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT1_PID=$! + +# Start the client2 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client2 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT2_PID=$! + +# Start the client3 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client3 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT3_PID=$! + +# Start the client4 +export VSOMEIP_APPLICATION_NAME=restart_routing_test_client4 +export VSOMEIP_CONFIGURATION=restart_routing_test_client.json +./restart_routing_test_client & +CLIENT4_PID=$! + +sleep 2 +echo "----------------------------------------------" +echo " let vsomeipd crash (kill -9) " +echo "----------------------------------------------" +kill -9 $DAEMON_PID +sleep 1 +echo "----------------------------------------------" +echo " let service crash (kill -9) " +echo "----------------------------------------------" +kill -9 $SERIVCE_PID +echo "----------------------------------------------" +echo " restart vsomeipd " +echo "----------------------------------------------" +sleep 2 + +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +../daemon/./vsomeipd & +DAEMON_PID=$! + +echo "----------------------------------------------" +echo " restart service " +echo "----------------------------------------------" +sleep 1 + +# Start the service again +export VSOMEIP_APPLICATION_NAME=restart_routing_test_service +export VSOMEIP_CONFIGURATION=restart_routing_test_service.json +./restart_routing_test_service & +SERIVCE_PID=$! + +wait $SERIVCE_PID || ((FAIL+=1)) +wait $CLIENT1_PID || ((FAIL+=1)) +wait $CLIENT2_PID || ((FAIL+=1)) +wait $CLIENT3_PID || ((FAIL+=1)) +wait $CLIENT4_PID || ((FAIL+=1)) + +kill $DAEMON_PID +wait $DAEMON_PID + +# Check if client and server both exited sucessfully and the service didnt't +# have any open tcp/udp sockets +if [ $FAIL -eq 0 ] +then + exit 0 +else + exit 1 +fi |