summaryrefslogtreecommitdiff
path: root/test/restart_routing_tests
diff options
context:
space:
mode:
Diffstat (limited to 'test/restart_routing_tests')
-rw-r--r--test/restart_routing_tests/restart_routing_test_autoconfig.json24
-rw-r--r--test/restart_routing_tests/restart_routing_test_client.cpp158
-rw-r--r--test/restart_routing_tests/restart_routing_test_client.hpp50
-rw-r--r--test/restart_routing_tests/restart_routing_test_client.json48
-rwxr-xr-xtest/restart_routing_tests/restart_routing_test_client_start.sh9
-rw-r--r--test/restart_routing_tests/restart_routing_test_service.cpp133
-rw-r--r--test/restart_routing_tests/restart_routing_test_service.hpp44
-rw-r--r--test/restart_routing_tests/restart_routing_test_service.json44
-rwxr-xr-xtest/restart_routing_tests/restart_routing_test_service_start.sh9
-rwxr-xr-xtest/restart_routing_tests/restart_routing_test_starter.sh312
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