summaryrefslogtreecommitdiff
path: root/test/security_config_plugin_tests/security_config_plugin_test_client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/security_config_plugin_tests/security_config_plugin_test_client.cpp')
-rwxr-xr-xtest/security_config_plugin_tests/security_config_plugin_test_client.cpp1045
1 files changed, 0 insertions, 1045 deletions
diff --git a/test/security_config_plugin_tests/security_config_plugin_test_client.cpp b/test/security_config_plugin_tests/security_config_plugin_test_client.cpp
deleted file mode 100755
index 9438738..0000000
--- a/test/security_config_plugin_tests/security_config_plugin_test_client.cpp
+++ /dev/null
@@ -1,1045 +0,0 @@
-// Copyright (C) 2014-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 <chrono>
-#include <condition_variable>
-#include <iomanip>
-#include <iostream>
-#include <sstream>
-#include <thread>
-#include <map>
-#include <algorithm>
-#include <cstring>
-
-#include <gtest/gtest.h>
-
-#ifndef _WIN32
-#include <signal.h>
-#endif
-
-#include <vsomeip/vsomeip.hpp>
-#include "../../implementation/utility/include/utility.hpp"
-#include "../../implementation/logging/include/logger.hpp"
-#include "../../implementation/configuration/include/policy.hpp"
-
-#include "../security_config_plugin_tests/security_config_plugin_test_globals.hpp"
-class security_config_plugin_test_client;
-static security_config_plugin_test_client* the_client;
-extern "C" void signal_handler(int _signum);
-
-#define GET_LONG_BYTE0(x) ((x) & 0xFF)
-#define GET_LONG_BYTE1(x) (((x) >> 8) & 0xFF)
-#define GET_LONG_BYTE2(x) (((x) >> 16) & 0xFF)
-#define GET_LONG_BYTE3(x) (((x) >> 24) & 0xFF)
-
-class security_config_plugin_test_client {
-public:
- security_config_plugin_test_client(bool _update_only, bool _remove_only, bool _subscribe_only) :
- update_only_(_update_only),
- remove_only_(_remove_only),
- subscribe_only_(_subscribe_only),
- app_(vsomeip::runtime::get()->create_application()),
- wait_until_registered_(true),
- wait_until_security_config_service_available_(true),
- wait_until_control_service_available_(true),
- wait_until_updated_service_101_available_(true),
- wait_until_updated_service_102_available_(true),
- wait_until_method_1_responses_received_(true),
- wait_until_method_2_responses_received_(true),
- number_of_received_responses_method_1(0),
- number_of_received_responses_method_2(0),
- number_of_received_events_1(0),
- number_of_received_events_2(0),
- number_of_received_events_4(0),
- wait_until_notifications_1_received_(true),
- wait_until_notifications_2_received_(true),
- wait_for_stop_(true),
- update_ok_(false),
- removal_ok_(false),
- stop_thread_(std::bind(&security_config_plugin_test_client::wait_for_stop, this)),
- run_thread_(std::bind(&security_config_plugin_test_client::run, this)) {
- if (!app_->init()) {
- ADD_FAILURE() << "Couldn't initialize application";
- return;
- }
-
- // register signal handler
- the_client = this;
- struct sigaction sa_new, sa_old;
- sa_new.sa_handler = signal_handler;
- sa_new.sa_flags = 0;
- sigemptyset(&sa_new.sa_mask);
- ::sigaction(SIGUSR1, &sa_new, &sa_old);
- ::sigaction(SIGINT, &sa_new, &sa_old);
- ::sigaction(SIGTERM, &sa_new, &sa_old);
- ::sigaction(SIGABRT, &sa_new, &sa_old);
-
- app_->register_state_handler(
- std::bind(&security_config_plugin_test_client::on_state, this,
- std::placeholders::_1));
-
- // handle plugin messages
- app_->register_message_handler(security_config_plugin_test::security_config_plugin_serviceinfo.service_id,
- security_config_plugin_test::security_config_plugin_serviceinfo.instance_id,
- vsomeip::ANY_METHOD,
- std::bind(&security_config_plugin_test_client::on_plugin_message, this,
- std::placeholders::_1));
-
- // handle service 0x0101 messages
- app_->register_message_handler(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- vsomeip::ANY_METHOD,
- std::bind(&security_config_plugin_test_client::on_service_1_message, this,
- std::placeholders::_1));
-
- // handle service 0x0102 messages
- app_->register_message_handler(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- vsomeip::ANY_METHOD,
- std::bind(&security_config_plugin_test_client::on_service_2_message, this,
- std::placeholders::_1));
-
- // request acl plugin interface service
- app_->register_availability_handler(
- security_config_plugin_test::security_config_plugin_serviceinfo.service_id,
- security_config_plugin_test::security_config_plugin_serviceinfo.instance_id,
- std::bind(&security_config_plugin_test_client::on_availability, this,
- std::placeholders::_1, std::placeholders::_2,
- std::placeholders::_3),
- security_config_plugin_test::security_config_plugin_major_version_);
- app_->request_service(
- security_config_plugin_test::security_config_plugin_serviceinfo.service_id,
- security_config_plugin_test::security_config_plugin_serviceinfo.instance_id,
- security_config_plugin_test::security_config_plugin_major_version_, vsomeip::ANY_MINOR);
-
- // request control service which is globally allowed
- app_->register_availability_handler(
- security_config_plugin_test::security_config_test_serviceinfo_3.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_3.instance_id,
- std::bind(&security_config_plugin_test_client::on_availability, this,
- std::placeholders::_1, std::placeholders::_2,
- std::placeholders::_3));
- app_->request_service(
- security_config_plugin_test::security_config_test_serviceinfo_3.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_3.instance_id,
- vsomeip::ANY_MAJOR, vsomeip::ANY_MINOR);
-
- // request service 0x0101 which is globally blacklisted and shall get available after aclUpdate
- app_->register_availability_handler(
- security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- std::bind(&security_config_plugin_test_client::on_availability, this,
- std::placeholders::_1, std::placeholders::_2,
- std::placeholders::_3));
- app_->request_service(
- security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- vsomeip::ANY_MAJOR, vsomeip::ANY_MINOR);
-
-
- // request service 0x0102 which is globally blacklisted and shall get available after aclUpdate
- app_->register_availability_handler(
- security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- std::bind(&security_config_plugin_test_client::on_availability, this,
- std::placeholders::_1, std::placeholders::_2,
- std::placeholders::_3));
- app_->request_service(
- security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- vsomeip::ANY_MAJOR, vsomeip::ANY_MINOR);
-
- // offer service 0x0100 which is not allowed to be offered at any time
- // (log message "Skip offer!" should be printed by daemon)
- app_->offer_service(0x666, security_config_plugin_test::security_config_test_serviceinfo_1.instance_id);
-
- app_->start();
- }
-
- ~security_config_plugin_test_client() {
- run_thread_.join();
- stop_thread_.join();
-
- }
-
- void 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) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_registered_ = false;
- condition_.notify_one();
- }
- }
-
- void on_availability(vsomeip::service_t _service,
- vsomeip::instance_t _instance, bool _is_available) {
- if(_is_available) {
- // check plugin interface availability
- if (_service == security_config_plugin_test::security_config_plugin_serviceinfo.service_id &&
- _instance == security_config_plugin_test::security_config_plugin_serviceinfo.instance_id) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_security_config_service_available_ = false;
- condition_.notify_one();
- }
-
- // check control service availability
- if (_service == security_config_plugin_test::security_config_test_serviceinfo_3.service_id &&
- _instance == security_config_plugin_test::security_config_test_serviceinfo_3.instance_id) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_control_service_available_ = false;
- condition_.notify_one();
- }
-
- // check updated policy makes service 0x0101 available
- if (_service == security_config_plugin_test::security_config_test_serviceinfo_1.service_id &&
- _instance == security_config_plugin_test::security_config_test_serviceinfo_1.instance_id) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_updated_service_101_available_ = false;
- condition_.notify_one();
- }
-
- // check updated policy makes service 0x0102 available
- if (_service == security_config_plugin_test::security_config_test_serviceinfo_2.service_id &&
- _instance == security_config_plugin_test::security_config_test_serviceinfo_2.instance_id) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_updated_service_102_available_ = false;
- condition_.notify_one();
- }
- } else {
-
- }
- }
-
- void on_service_1_message(const std::shared_ptr<vsomeip::message> &_message) {
- if(_message->get_message_type() == vsomeip::message_type_e::MT_NOTIFICATION) {
-
- number_of_received_events_1++;
-
- // event which should never be received
- if (_message->get_method() == 0x8004)
- number_of_received_events_4++;
-
- other_services_received_notification_[std::make_pair(_message->get_service(),
- _message->get_method())]++;
- VSOMEIP_INFO
- << "on_service_1_message Received a notification with Client/Session [" << std::setw(4)
- << std::setfill('0') << std::hex << _message->get_client() << "/"
- << std::setw(4) << std::setfill('0') << std::hex
- << _message->get_session() << "] from Service/Method ["
- << std::setw(4) << std::setfill('0') << std::hex
- << _message->get_service() << "/" << std::setw(4) << std::setfill('0')
- << std::hex << _message->get_method() <<"] (now have: "
- << std::dec << other_services_received_notification_[std::make_pair(_message->get_service(),
- _message->get_method())] << ")";
-
- std::shared_ptr<vsomeip::payload> its_payload(_message->get_payload());
- EXPECT_EQ(2u, its_payload->get_length());
- EXPECT_EQ((_message->get_service() & 0xFF00 ) >> 8, its_payload->get_data()[0]);
- EXPECT_EQ((_message->get_service() & 0xFF), its_payload->get_data()[1]);
- bool notify = all_notifications_received();
-
- if(notify) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_notifications_1_received_ = false;
- condition_.notify_one();
- }
- } else if (_message->get_message_type() == vsomeip::message_type_e::MT_RESPONSE) {
- if(_message->get_method() == security_config_plugin_test::security_config_test_serviceinfo_1.method_id) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- number_of_received_responses_method_1++;
- wait_until_method_1_responses_received_ = false;
- condition_.notify_one();
- }
- }
- }
-
- void on_service_2_message(const std::shared_ptr<vsomeip::message> &_message) {
- if(_message->get_message_type() == vsomeip::message_type_e::MT_NOTIFICATION) {
-
- number_of_received_events_2++;
- other_services_received_notification_[std::make_pair(_message->get_service(),
- _message->get_method())]++;
- VSOMEIP_INFO
- << "on_service_2_message Received a notification with Client/Session [" << std::setw(4)
- << std::setfill('0') << std::hex << _message->get_client() << "/"
- << std::setw(4) << std::setfill('0') << std::hex
- << _message->get_session() << "] from Service/Method ["
- << std::setw(4) << std::setfill('0') << std::hex
- << _message->get_service() << "/" << std::setw(4) << std::setfill('0')
- << std::hex << _message->get_method() <<"] (now have: "
- << std::dec << other_services_received_notification_[std::make_pair(_message->get_service(),
- _message->get_method())] << ")";
-
- std::shared_ptr<vsomeip::payload> its_payload(_message->get_payload());
- EXPECT_EQ(2u, its_payload->get_length());
- EXPECT_EQ((_message->get_service() & 0xFF00 ) >> 8, its_payload->get_data()[0]);
- EXPECT_EQ((_message->get_service() & 0xFF), its_payload->get_data()[1]);
- bool notify = all_notifications_received();
-
- if(notify) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- wait_until_notifications_2_received_ = false;
- condition_.notify_one();
- }
- } else if (_message->get_message_type() == vsomeip::message_type_e::MT_RESPONSE) {
- if(_message->get_method() == security_config_plugin_test::security_config_test_serviceinfo_2.method_id) {
- std::lock_guard<std::mutex> its_lock(mutex_);
- number_of_received_responses_method_2++;
- wait_until_method_2_responses_received_ = false;
- condition_.notify_one();
- }
- }
- }
-
- void on_plugin_message(const std::shared_ptr<vsomeip::message> &_message) {
- if (_message->get_message_type() == vsomeip::message_type_e::MT_RESPONSE) {
- VSOMEIP_INFO
- << "Received a response with Client/Session [" << std::setw(4)
- << std::setfill('0') << std::hex << _message->get_client() << "/"
- << std::setw(4) << std::setfill('0') << std::hex
- << _message->get_session() << "] from Service/Method ["
- << std::setw(4) << std::setfill('0') << std::hex
- << _message->get_service() << "/" << std::setw(4) << std::setfill('0')
- << std::hex << _message->get_method();
-
- std::shared_ptr<vsomeip::payload> pl = _message->get_payload();
- EXPECT_EQ( vsomeip::return_code_e::E_OK, _message->get_return_code());
-
- uint32_t length = pl->get_length();
- EXPECT_EQ(length, (uint32_t) 0x01);
-
- // expect status_success_ returned by plugin interface
- bool success(false);
- uint8_t* dataptr = pl->get_data();
- for(uint32_t i = 0; i< pl->get_length(); i++) {
- std::cout << "payload data: " << std::hex << (uint32_t) dataptr[i] << std::endl;
- EXPECT_EQ(dataptr[i], 0);
- if (dataptr[i] == 0x00) {
- success = true;
- }
- }
- if (success) {
- // updateAcl answer
- if (_message->get_service() == security_config_plugin_test::security_config_plugin_serviceinfo.service_id
- &&_message->get_method() == security_config_plugin_test::security_config_plugin_serviceinfo.method_id) {
- update_ok_ = true;
- }
-
- // removeAcl answer
- if (_message->get_service() == security_config_plugin_test::security_config_plugin_serviceinfo.service_id
- &&_message->get_method() == security_config_plugin_test::security_config_plugin_serviceinfo_reset.method_id) {
- removal_ok_ = true;
- }
- }
- }
- }
-
- bool all_notifications_received() {
- return std::all_of(
- other_services_received_notification_.cbegin(),
- other_services_received_notification_.cend(),
- [&](const std::map<std::pair<vsomeip::service_t,
- vsomeip::method_t>, std::uint32_t>::value_type& v)
- {
- if (v.second == security_config_plugin_test::notifications_to_send) {
- return true;
- } else {
- if (v.second >= security_config_plugin_test::notifications_to_send) {
- VSOMEIP_WARNING
- << " Received multiple initial events from service/instance: "
- << std::setw(4) << std::setfill('0') << std::hex << v.first.first
- << "."
- << std::setw(4) << std::setfill('0') << std::hex << v.first.second
- << " number of received events: " << v.second
- << ". This is caused by StopSubscribe/Subscribe messages and/or"
- << " service offered via UDP and TCP";
- return false;
- } else {
- return false;
- }
- }
- }
- );
- }
-
- void handle_signal(int _signum) {
- VSOMEIP_DEBUG << "Catched signal, going down ("
- << std::dec <<_signum << ")";
- std::lock_guard<std::mutex> its_lock(stop_mutex_);
- wait_for_stop_ = false;
- stop_condition_.notify_one();
- }
-
- void wait_for_stop() {
- {
- std::unique_lock<std::mutex> its_lock(stop_mutex_);
- while (wait_for_stop_) {
- stop_condition_.wait(its_lock);
- }
-
- EXPECT_TRUE(update_ok_);
-
- // Todo if policy was removed, the plugin answer is not allowed to be sent back as plugin service is blacklisted again
- //EXPECT_TRUE(removal_ok_);
-
- VSOMEIP_INFO << "Received all responses from plugin, going down";
- }
- app_->clear_all_handler();
- app_->stop();
- }
-
- void call_acl_deployment_interface(bool _updateAcl) {
-
- uint32_t user_id = (uint32_t) getuid();
- uint32_t group_id = (uint32_t) getgid();
-
- if(update_only_ || remove_only_) {
- user_id = 1001;
- group_id = 1001;
- }
-
- uint8_t uid_byte_0 = (uint8_t) GET_LONG_BYTE3(user_id);
- uint8_t uid_byte_1 = GET_LONG_BYTE2(user_id);
- uint8_t uid_byte_2 = GET_LONG_BYTE1(user_id);
- uint8_t uid_byte_3 = GET_LONG_BYTE0(user_id);
-
- uint8_t gid_byte_0 = (uint8_t) GET_LONG_BYTE3(group_id);
- uint8_t gid_byte_1 = GET_LONG_BYTE2(group_id);
- uint8_t gid_byte_2 = GET_LONG_BYTE1(group_id);
- uint8_t gid_byte_3 = GET_LONG_BYTE0(group_id);
-
- // send policy payload which also contains part of global security json to allow answer for removeAcl calls
- // updateAcl payload:
- /*
- Security configuration: UID: 0x3e8
- Security configuration: GID: 0x3e8
- Security configuration: RQUESTS POLICY SIZE: 4
- ALLOWED REQUESTS Service: 0x101
- Instances:
- first: 0x63 last: 0x63
- Methods:
- first: 0x1 last: 0x5
- first: 0x8001 last: 0x8003
- ALLOWED REQUESTS Service: 0x102
- Instances:
- first: 0x63 last: 0x63
- Methods:
- first: 0x1 last: 0x5
- first: 0x8001 last: 0x8003
- ALLOWED REQUESTS Service: 0x103
- Instances:
- first: 0x63 last: 0x63
- Methods:
- first: 0x3 last: 0x3
- first: 0x7777 last: 0x7777
- ALLOWED REQUESTS Service: 0xF90F
- Instances:
- first: 0x1 last: 0x1
- Methods:
- first: 0x1 last: 0x1
- first: 0x2 last: 0x2
- Security configuration: OFFER POLICY SIZE: 4
- ALLOWED OFFERS Service: 0x101
- Instances:
- first: 0x63 last: 0x63
- ALLOWED OFFERS Service: 0x102
- Instances:
- first: 0x63 last: 0x63
- ALLOWED OFFERS Service: 0x103
- Instances:
- first: 0x63 last: 0x63
- ALLOWED OFFERS Service: 0xF90F
- Instances:
- first: 0x1 last: 0x1
- */
- std::array<unsigned char, 280> update_payload =
- {{ uid_byte_0, uid_byte_1, uid_byte_2, uid_byte_3, gid_byte_0, gid_byte_1, gid_byte_2, gid_byte_3,
- 0x00, 0x00, 0x00, 0xb8, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01,
- 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00,
- 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x01, 0x77, 0x77, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x80, 0x01, 0x80, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02,
- 0x80, 0x01, 0x80, 0x03, 0x00, 0x00, 0x00, 0x40, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x01, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63}};
-
- // removeAcl payload for UID 12345 GID 4567 or UID: 1000 -> 0x03, 0xe8,
- std::array<unsigned char, 8> remove_payload = {{uid_byte_0, uid_byte_1, uid_byte_2, uid_byte_3, gid_byte_0, gid_byte_1, gid_byte_2, gid_byte_3}};
-
- std::shared_ptr<vsomeip::message> its_request = vsomeip::runtime::get()->create_request();
- its_request->set_service(security_config_plugin_test::security_config_plugin_serviceinfo.service_id);
- its_request->set_instance(security_config_plugin_test::security_config_plugin_serviceinfo.instance_id);
- std::vector<vsomeip::byte_t> its_payload;
-
- if (_updateAcl) {
- its_request->set_method(security_config_plugin_test::security_config_plugin_serviceinfo.method_id);
- for (uint32_t i=0; i < update_payload.size(); i++) {
- its_payload.push_back(update_payload[i]);
- }
- } else {
- its_request->set_method(security_config_plugin_test::security_config_plugin_serviceinfo_reset.method_id);
- for (uint32_t i=0; i < remove_payload.size(); i++) {
- its_payload.push_back(remove_payload[i]);
- }
- }
- its_request->set_payload(vsomeip::runtime::get()->create_payload(its_payload));
- app_->send(its_request);
- }
-
- void call_try_offer() {
- std::shared_ptr<vsomeip::message> its_request = vsomeip::runtime::get()->create_request();
- its_request->set_service(security_config_plugin_test::security_config_test_serviceinfo_3.service_id);
- its_request->set_instance(security_config_plugin_test::security_config_test_serviceinfo_3.instance_id);
- its_request->set_method(security_config_plugin_test::security_config_test_serviceinfo_3.method_id);
- app_->send(its_request);
- }
-
- void call_method(vsomeip::service_t _service, vsomeip::instance_t _instance, vsomeip::method_t _method) {
- std::shared_ptr<vsomeip::message> its_request = vsomeip::runtime::get()->create_request();
- its_request->set_service(_service);
- its_request->set_instance(_instance);
- its_request->set_method(_method);
- app_->send(its_request);
- }
-
- void run() {
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_registered_) {
- condition_.wait(its_lock);
- }
- }
-
- // payload for testing utility::parse_policy()
- /*
- Security configuration: UID: 0x01
- Security configuration: GID: 0x01
- Security configuration: RQUESTS POLICY SIZE: 4
- ALLOWED REQUESTS Service: 0x101
- Instances:
- first: 0x63 last: 0x63
- Methods:
- first: 0x1 last: 0x5
- first: 0x8001 last: 0x8003
- ALLOWED REQUESTS Service: 0x102
- Instances:
- first: 0x63 last: 0x63
- Methods:
- first: 0x1 last: 0x5
- first: 0x8001 last: 0x8003
- ALLOWED REQUESTS Service: 0x103
- Instances:
- first: 0x63 last: 0x63
- Methods:
- first: 0x3 last: 0x3
- first: 0x7777 last: 0x7777
- ALLOWED REQUESTS Service: 0xF90F
- Instances:
- first: 0x1 last: 0x1
- Methods:
- first: 0x1 last: 0x1
- first: 0x2 last: 0x2
- Security configuration: OFFER POLICY SIZE: 4
- ALLOWED OFFERS Service: 0x101
- Instances:
- first: 0x63 last: 0x63
- ALLOWED OFFERS Service: 0x102
- Instances:
- first: 0x63 last: 0x63
- ALLOWED OFFERS Service: 0x103
- Instances:
- first: 0x63 last: 0x63
- ALLOWED OFFERS Service: 0xF90F
- Instances:
- first: 0x1 last: 0x1
- */
- std::array<unsigned char, 280> policy_update_payload =
- {{ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, // uid / gid
- 0x00, 0x00, 0x00, 0xb8,
- 0xF9, 0x0F, // 0xf90f -> service ID at array index 12 - 13
- 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x0a,
- 0x00, 0x00, 0x00, 0x02, // -> union length = 2 byte
- 0x00, 0x00, 0x00, 0x01, // -> union type is single instance ID
- 0x00, 0x01, // -> single instance id 0x1 at array index 30 - 31
- 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x01, 0x03, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00,
- 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00,
- 0x00, 0x01, 0x77, 0x77, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x00, 0x00, 0x18,
- 0x00, 0x00, 0x00, 0x04,
- 0x00, 0x00, 0x00, 0x02, // -> union type is ID range
- 0x00, 0x01, // first 0x01 at array index 132 - 133
- 0x00, 0x05, // last 0x05 at array index 134 - 135
- 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x80, 0x01, 0x80, 0x03, 0x01, 0x02, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02,
- 0x80, 0x01, 0x80, 0x03, 0x00, 0x00, 0x00, 0x40, 0xF9, 0x0F, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x01, 0x01, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63, 0x01, 0x02, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00,
- 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x63}};
-
- // Check if parse_policy() correctly handles invalid service, instance and method ID's / ranges.
- uint32_t its_uid = 0x00;
- uint32_t its_gid = 0x00;
- uint32_t its_remaining_bytes_ = policy_update_payload.size();
- std::shared_ptr<vsomeip::policy> its_policy(std::make_shared<vsomeip::policy>());
- const vsomeip::byte_t* its_buffer_ptr = policy_update_payload.data();
-
- // valid policy
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set request service ID to invalid value 0x00
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_service = policy_update_payload;
- // set service ID from 0xf90f to 0x00
- policy_invalid_service[12] = 0x00;
- policy_invalid_service[13] = 0x00;
- its_buffer_ptr = policy_invalid_service.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), false);
-
- // set request service ID to invalid value 0xFFFF
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_service_2 = policy_update_payload;
- // set service ID from 0xf90f to 0x00
- policy_invalid_service_2[12] = 0xFF;
- policy_invalid_service_2[13] = 0xFF;
- its_buffer_ptr = policy_invalid_service_2.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), false);
-
- // set request single instance ID to invalid value 0x00 which shall be ignored
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_instance = policy_update_payload;
- // set instance ID of service 0xf90f to 0x00
- policy_invalid_instance[30] = 0x00;
- policy_invalid_instance[31] = 0x00;
- its_buffer_ptr = policy_invalid_instance.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set request single instance ID to valid value 0xFFFF
- // meaning ANY_INSTANCE range from 0x01 to 0xFFFE
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_valid_instance = policy_update_payload;
- // set instance ID of service 0xf90f to 0xFFFF
- policy_valid_instance[30] = 0xFF;
- policy_valid_instance[31] = 0xFF;
- its_buffer_ptr = policy_valid_instance.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set first of range to 0x00 and last to 0x05 which is invalid
- // the range shall be adjusted to be 0x01 to 0x05 without giving an error
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_method = policy_update_payload;
- policy_invalid_method[132] = 0x00;
- policy_invalid_method[133] = 0x00;
- its_buffer_ptr = policy_invalid_method.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set first of range to 0x01 and last to 0x00 which is invalid
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_method_2 = policy_update_payload;
- policy_invalid_method_2[134] = 0x00;
- policy_invalid_method_2[135] = 0x00;
- its_buffer_ptr = policy_invalid_method_2.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), false);
-
- // set first of range to 0x06 and last to 0x05 which is invalid
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_method_3 = policy_update_payload;
- policy_invalid_method_3[132] = 0x00;
- policy_invalid_method_3[133] = 0x06;
- its_buffer_ptr = policy_invalid_method_3.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), false);
-
- // set first of range to 0x01 and last to 0xFFFF which is invalid as first and last
- // must be set to 0xFFFF if ANY_METHOD / ANY_INSTANCE shall be specified
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_method_4 = policy_update_payload;
- policy_invalid_method_4[134] = 0xFF;
- policy_invalid_method_4[135] = 0xFF;
- its_buffer_ptr = policy_invalid_method_4.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), false);
-
- // set first of range to 0xFFFF and last to 0xFFFF which is valid
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_valid_method = policy_update_payload;
- policy_valid_method[132] = 0xFF;
- policy_valid_method[133] = 0xFF;
- policy_valid_method[134] = 0xFF;
- policy_valid_method[135] = 0xFF;
- its_buffer_ptr = policy_valid_method.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set first of range to 0x01 and last to 0x01 which is valid
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_valid_method_2 = policy_update_payload;
- policy_valid_method_2[132] = 0x00;
- policy_valid_method_2[133] = 0x01;
- policy_valid_method_2[134] = 0x00;
- policy_valid_method_2[135] = 0x01;
- its_buffer_ptr = policy_valid_method_2.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set first of range to 0x01 and last to 0xFFFE which is valid
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_valid_method_3 = policy_update_payload;
- policy_valid_method_3[132] = 0x00;
- policy_valid_method_3[133] = 0x01;
- policy_valid_method_3[134] = 0xFF;
- policy_valid_method_3[135] = 0xFE;
- its_buffer_ptr = policy_valid_method_3.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), true);
-
- // set first of range to 0xFFFF and last to 0x05 which is invalid
- its_remaining_bytes_ = policy_update_payload.size();
- std::array<unsigned char, 280> policy_invalid_method_6 = policy_update_payload;
- policy_invalid_method_6[132] = 0xFF;
- policy_invalid_method_6[133] = 0xFF;
- its_buffer_ptr = policy_invalid_method_6.data();
- EXPECT_EQ(::vsomeip::utility::parse_policy(its_buffer_ptr, its_remaining_bytes_, its_uid, its_gid, its_policy), false);
-
- VSOMEIP_INFO << "waiting until security_config plugin service is available!";
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_security_config_service_available_) {
- condition_.wait(its_lock);
- }
- wait_until_security_config_service_available_ = true;
- VSOMEIP_INFO << "security config plugin service is available";
- }
-
- if (update_only_) {
- VSOMEIP_INFO << "ONLY Calling updateAcl with user ID 1001 and exit -> shall allow method calls and events...";
- call_acl_deployment_interface(true);
- sleep(1);
- exit(0);
- } else if (remove_only_) {
- VSOMEIP_INFO << "ONLY Calling removeAcl with user ID 1001 and exit -> removes complete allow policy (disables all method calls / events)";
- call_acl_deployment_interface(false);
- sleep(1);
- exit(0);
- } else if (subscribe_only_) {
- VSOMEIP_INFO << "Subscribe to still blacklisted event 0x8004 and do not expect an event!";
- // check that events for service 0x101 and event 0x8004 are never received as policy does not allow it
- std::set<vsomeip::eventgroup_t> its_eventgroups;
- its_eventgroups.insert(security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id);
- app_->request_event(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- static_cast<vsomeip::event_t>(0x8004),
- its_eventgroups, true);
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id,
- vsomeip::DEFAULT_MAJOR, vsomeip::subscription_type_e::SU_RELIABLE_AND_UNRELIABLE,
- static_cast<vsomeip::event_t>(0x8004));
- sleep(1);
- EXPECT_EQ(number_of_received_events_4, (uint32_t) 0);
- exit(0);
- }
-
- VSOMEIP_INFO << "Do method calls to blacklisted service/methods 0x101/0x01 and 0x102/0x02 and do not expect any response";
-
- // do method calls to blacklisted services -> no response expected
- call_method(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.method_id);
-
- call_method(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.method_id);
-
-
- // check that no events are received before policy allows subscribing
- VSOMEIP_INFO << "Subscribe to blacklisted service/event 0x101/0x8001 and do not expect any event";
- std::set<vsomeip::eventgroup_t> its_eventgroups;
- its_eventgroups.insert(security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id);
-
- app_->request_event(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- static_cast<vsomeip::event_t>(security_config_plugin_test::security_config_test_serviceinfo_1.event_id),
- its_eventgroups, true);
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id,
- vsomeip::DEFAULT_MAJOR, vsomeip::subscription_type_e::SU_RELIABLE_AND_UNRELIABLE,
- static_cast<vsomeip::event_t>(security_config_plugin_test::security_config_test_serviceinfo_1.event_id));
-
- sleep(1);
-
- EXPECT_EQ(number_of_received_responses_method_1, (uint32_t) 0);
- EXPECT_EQ(number_of_received_responses_method_2, (uint32_t) 0);
- EXPECT_EQ(number_of_received_events_1, (uint32_t) 0);
- EXPECT_EQ(number_of_received_events_2, (uint32_t) 0);
-
- VSOMEIP_INFO << "Calling updateAcl which shall allow method calls and events...";
- call_acl_deployment_interface(true);
- VSOMEIP_INFO << "wait until control service is available ...";
-
- // wait until control service is available
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_control_service_available_) {
- condition_.wait(its_lock);
- }
- wait_until_control_service_available_ = true;
- VSOMEIP_INFO << "local control service 0x0103 available";
- }
- // Todo wait until plugin has answered the acl update
- sleep(1);
-
- // Send message_try_offer request in order to trigger stopoffer and reoffering of now allowed services
- VSOMEIP_INFO << "trigger stopoffer / reoffer of service 0x0101 and 0x0102 ...";
- call_try_offer();
-
- // try requesting the services 0x0101 and 0x0102 again
- // (initial request service was rejected before which causes no routing info to be sent after policy update)
- app_->request_service(
- security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- vsomeip::ANY_MAJOR, vsomeip::ANY_MINOR);
-
- app_->request_service(
- security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_3.instance_id,
- vsomeip::ANY_MAJOR, vsomeip::ANY_MINOR);
-
- // check that services 0x0101 get available after acl update
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_updated_service_101_available_) {
- condition_.wait(its_lock);
- }
- wait_until_updated_service_101_available_ = true;
- VSOMEIP_INFO << "By policy update allowed service 0x0101 got available";
- }
-
- // check that services 0x0102 get available after acl update
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_updated_service_102_available_) {
- condition_.wait(its_lock);
- }
- wait_until_updated_service_102_available_ = true;
- VSOMEIP_INFO << "By policy update allowed service 0x0102 got available";
- }
-
- VSOMEIP_INFO << "Call now allowed service/methods 0x101/0x01 and 0x102/0x02 after allow policy update and expect responses!";
-
- // call method ids which should now be allowed to be requested
- call_method(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.method_id);
-
- // check that method calls are working
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_method_1_responses_received_) {
- condition_.wait(its_lock);
- }
- wait_until_method_1_responses_received_ = true;
- VSOMEIP_INFO << "By policy update allowed response to request of service/instance/method "
- << std::hex << security_config_plugin_test::security_config_test_serviceinfo_1.service_id
- << "/" << security_config_plugin_test::security_config_test_serviceinfo_1.instance_id
- << "/" << security_config_plugin_test::security_config_test_serviceinfo_1.method_id << " received";
- }
-
- call_method(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.method_id);
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_method_2_responses_received_) {
- condition_.wait(its_lock);
- }
- wait_until_method_2_responses_received_ = true;
- VSOMEIP_INFO << "By policy update allowed response to request of service/instance/method "
- << std::hex << security_config_plugin_test::security_config_test_serviceinfo_2.service_id
- << "/" << security_config_plugin_test::security_config_test_serviceinfo_2.instance_id
- << "/" << security_config_plugin_test::security_config_test_serviceinfo_2.method_id << " received";
- }
-
- EXPECT_EQ(number_of_received_responses_method_1, (uint32_t) 1);
- EXPECT_EQ(number_of_received_responses_method_2, (uint32_t) 1);
-
- // check that events are received now
- VSOMEIP_INFO << "Subscribe to service 0x101 / 0x102 events 0x8001 / 0x8002 and expect initial events";
- app_->request_event(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- static_cast<vsomeip::event_t>(security_config_plugin_test::security_config_test_serviceinfo_1.event_id),
- its_eventgroups, true);
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id,
- vsomeip::DEFAULT_MAJOR, vsomeip::subscription_type_e::SU_RELIABLE_AND_UNRELIABLE,
- static_cast<vsomeip::event_t>(security_config_plugin_test::security_config_test_serviceinfo_1.event_id));
-
- // check that from first service events were received
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_notifications_1_received_) {
- condition_.wait(its_lock);
- }
- wait_until_notifications_1_received_ = true;
- VSOMEIP_INFO << "notifications from service 0x0101 received";
- }
-
- app_->request_event(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- static_cast<vsomeip::event_t>(security_config_plugin_test::security_config_test_serviceinfo_2.event_id),
- its_eventgroups, true);
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.eventgroup_id,
- vsomeip::DEFAULT_MAJOR, vsomeip::subscription_type_e::SU_RELIABLE_AND_UNRELIABLE,
- static_cast<vsomeip::event_t>(security_config_plugin_test::security_config_test_serviceinfo_2.event_id));
-
- // check that from second service events were received
- {
- std::unique_lock<std::mutex> its_lock(mutex_);
- while (wait_until_notifications_2_received_) {
- condition_.wait(its_lock);
- }
- wait_until_notifications_2_received_ = true;
- VSOMEIP_INFO << "notifications from service 0x0102 received";
- }
-
- VSOMEIP_INFO << "Subscribe to still blacklisted event 0x8004 and do not expect an event!";
- // check that events for service 0x101 and event 0x8004 are never received as policy does not allow it
- app_->request_event(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- static_cast<vsomeip::event_t>(0x8004),
- its_eventgroups, true);
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id,
- vsomeip::DEFAULT_MAJOR, vsomeip::subscription_type_e::SU_RELIABLE_AND_UNRELIABLE,
- static_cast<vsomeip::event_t>(0x8004));
- sleep(1);
- EXPECT_EQ(number_of_received_events_4, (uint32_t) 0);
-
-
- // unsusbcribe
- app_->unsubscribe(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id);
-
- app_->unsubscribe(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.eventgroup_id);
-
- // tigger removeAcl (removes the whole configuration for uid 1000)
- VSOMEIP_INFO << "Calling removeAcl which removes complete allow policy (disables all method calls / events)";
- call_acl_deployment_interface(false);
-
- //Todo wait for plugin response
- sleep(1);
-
- VSOMEIP_INFO << "Call now blacklisted methods after complete allow policy removal and do not expect any response!";
- // no response expected as policy was removed
- call_method(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.method_id);
-
- call_method(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.method_id);
-
- // check that no more initial events are received now on resubscribe
- VSOMEIP_INFO << "Subscribe to now blacklisted events after complete allow policy removal and do not expect initial events!";
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_1.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_1.eventgroup_id);
-
- app_->subscribe(security_config_plugin_test::security_config_test_serviceinfo_2.service_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.instance_id,
- security_config_plugin_test::security_config_test_serviceinfo_2.eventgroup_id);
-
- sleep(1);
-
- EXPECT_EQ(number_of_received_responses_method_1, (uint32_t) 1);
- EXPECT_EQ(number_of_received_responses_method_2, (uint32_t) 1);
- EXPECT_EQ(number_of_received_events_1, (uint32_t) 1);
- EXPECT_EQ(number_of_received_events_2, (uint32_t) 1);
-
- {
- std::lock_guard<std::mutex> its_lock(stop_mutex_);
- sleep(1);
- wait_for_stop_ = false;
- stop_condition_.notify_one();
- }
- }
-
-private:
- bool update_only_;
- bool remove_only_;
- bool subscribe_only_;
- std::shared_ptr<vsomeip::application> app_;
- bool wait_until_registered_;
- bool wait_until_security_config_service_available_;
- bool wait_until_control_service_available_;
- bool wait_until_updated_service_101_available_;
- bool wait_until_updated_service_102_available_;
- bool wait_until_method_1_responses_received_;
- bool wait_until_method_2_responses_received_;
- uint32_t number_of_received_responses_method_1;
- uint32_t number_of_received_responses_method_2;
- uint32_t number_of_received_events_1;
- uint32_t number_of_received_events_2;
- uint32_t number_of_received_events_4;
- bool wait_until_notifications_1_received_;
- bool wait_until_notifications_2_received_;
- std::mutex mutex_;
- std::condition_variable condition_;
-
- bool wait_for_stop_;
- bool update_ok_;
- bool removal_ok_;
-
- std::mutex stop_mutex_;
- std::condition_variable stop_condition_;
- std::thread stop_thread_;
-
- std::thread run_thread_;
- std::map<std::pair<vsomeip::service_t, vsomeip::method_t>, std::uint32_t> other_services_received_notification_;
-
-};
-
-#if 1
-static bool only_update;
-static bool only_remove;
-static bool only_subscribe;
-#endif
-
-extern "C" void signal_handler(int signum) {
- the_client->handle_signal(signum);
-}
-
-TEST(someip_security_config_plugin_test, update_remove_security_config_policy)
-{
- security_config_plugin_test_client its_sample(only_update, only_remove, only_subscribe);
-}
-
-#ifndef _WIN32
-int main(int argc, char** argv)
-{
- ::testing::InitGoogleTest(&argc, argv);
-#if 1
- only_update = false;
- only_remove = false;
- only_subscribe = false;
- if (argc > 1) {
- if(std::string("UPDATE") == std::string(argv[1])) {
- only_update = true;
- } else if(std::string("REMOVE") == std::string(argv[1])) {
- only_remove = true;
- } else if (std::string("SUBSCRIBE") == std::string(argv[1])) {
- only_subscribe = true;
- }
- }
-
-#endif
-
- return RUN_ALL_TESTS();
-}
-#endif