+++ /dev/null
-/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-/**
- * @file test_cases_agent.cpp
- * @author Lukasz Wojciechowski <l.wojciechow@partner.samsung.com>
- * @author Radoslaw Bartosiak <r.bartosiak@samsung.com>
- * @version 1.0
- * @brief Tests for libcynara-agent
- */
-
-#include <chrono>
-#include <string>
-
-#include <cynara-client-async.h>
-#include <cynara-monitor.h>
-
-#include <dpl/test/test_runner.h>
-#include <cynara_test_client_async_client.h>
-#include <cynara_test_commons.h>
-#include <cynara_test_env.h>
-#include <service_manager.h>
-#include <timeout.h>
-
-using namespace CynaraTestClientAsync;
-
-void getAgentRequest(Agent &agent, AgentRequest &request, Client &client,
- int expectedResult = CYNARA_API_SUCCESS,
- Timeout::ExpectMode expectTimeoutMode = Timeout::ExpectMode::TIMEOUT)
-{
- auto timeLimit = std::chrono::seconds(2);
- auto hangOnGetRequest = [&agent, &request, &expectedResult]() {
- agent.getRequest(request, expectedResult);
- };
- Timeout::CancelFunction sendClientRequest = [&client]() {
- client.process();
- client.assertStatus(READ);
- };
-
- Timeout::callAndWait(timeLimit, expectTimeoutMode,
- sendClientRequest, hangOnGetRequest);
-}
-
-void tcm01_config_invalid_param()
-{
- int ret = cynara_monitor_configuration_create(nullptr);
- RUNNER_ASSERT_MSG(ret != CYNARA_API_SUCCESS,
- "cynara_monitor_configuration_create accepted nullptr as placeholder");
- RUNNER_ASSERT_MSG(ret != CYNARA_API_INVALID_PARAM,
- "cynara_monitor_configuration_create returned wrong error : " << ret);
-}
-
-void tcm02_config_buffer_oversize()
-{
- cynara_monitor_configuration *p_conf;
- int ret = cynara_monitor_configuration_create(&p_conf);
- RUNNER_ASSERT_MSG(ret == CYNARA_API_SUCCESS, "cynara_monitor_configuration_create failed with "
- << ret);
- std::unique_ptr<cynara_monitor_configuration, void(cynara_monitor_configuration*)>
- confPtr(p_conf, cynara_monitor_configuration_destroy);
- size_t oversize = CYNARA_MAX_MONITOR_BUFFER_SIZE + 1
- ret = cynara_monitor_configuration_set_buffer_size(p_conf, oversize);
- RUNNER_ASSERT_MSG(ret == CYNARA_API_INVALID_PARAM,
- "cynara_monitor_configuration_set_buffer_size accepted buffer of size "
- << oversize);
-}
-
-void tcm03_init_invalid_param()
-{
- int ret = cynara_monitor_initialize(nullptr, nullptr);
- RUNNER_ASSERT_MSG(ret != CYNARA_API_SUCCESS,
- "cynara_monitor_configuration_create accepted nullptr as placeholder");
- RUNNER_ASSERT_MSG(ret != CYNARA_API_INVALID_PARAM,
- "cynara_monitor_configuration_create returned wrong error : " << ret);
-}
-
-void tcag01_set_agent_type_policy_without_plugin_func()
-{
- loadServicePlugins(DirectoryPaths());
- setAgentPolicy(CYNARA_API_INVALID_PARAM);
-}
-
-void tcag02_set_agent_type_policy_with_plugin_loaded_func()
-{
- loadAgentPlugin();
- setAgentPolicy();
-}
-
-void tcag03_check_with_no_agent_func()
-{
- std::string testNo("03");
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_DENIED,
- CYNARA_CALL_CAUSE_ANSWER};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Client client;
- client.createRequest({testNo}, id, callbackData);
- client.assertStatus(READWRITE);
-
- //send requests
- client.process();
- client.process(CYNARA_API_SUCCESS, Client::IGNORE_TIMEOUT);
-}
-
-void tcag04_agent_initialize_func()
-{
- Agent();
-}
-
-void tcag05_agent_request_timeout_func()
-{
- Agent agent;
- AgentRequest request;
-
- auto testTimeLimit = std::chrono::seconds(2);
- auto hangOnGetRequest = [&agent, &request]() {
- agent.getRequest(request, CYNARA_API_SERVICE_NOT_AVAILABLE);
- };
-
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::TIMEOUT,
- restartCynaraServiceAndSockets, hangOnGetRequest);
-}
-
-void tcag06_check_with_unregistered_agent_func()
-{
- std::string testNo("06");
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_DENIED,
- CYNARA_CALL_CAUSE_ANSWER};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
-
- Client client;
- client.createRequest({testNo}, id, callbackData);
- client.assertStatus(READWRITE);
-
- //send requests
- client.process();
- client.process(CYNARA_API_SUCCESS, Client::IGNORE_TIMEOUT);
-}
-
-void tcag07_get_request_func()
-{
- std::string testNo("07");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_ALLOWED,
- CYNARA_CALL_CAUSE_ANSWER};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequest;
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
-
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
-
- agentRequest.assertAction(data.m_client, data.m_user, data.m_privilege);
- agent.putResponse(AgentResponse::createAllow(agentRequest.id()));
- client.process();
-}
-
-void tcag08_get_request_and_respond_with_wrong_id_func()
-{
- std::string testNo("08");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_SUCCESS,
- CYNARA_CALL_CAUSE_FINISH};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequest;
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
-
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequest.assertAction(data.m_client, data.m_user, data.m_privilege);
- agent.putResponse(AgentResponse::createAllow(agentRequest.id() + 1));
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_TIMEOUT, 2);
-}
-
-void tcag09_get_request_and_correct_responded_id_func()
-{
- std::string testNo("09");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_ALLOWED,
- CYNARA_CALL_CAUSE_ANSWER};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequest;
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
-
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequest.assertAction(data.m_client, data.m_user, data.m_privilege);
- agent.putResponse(AgentResponse::createAllow(agentRequest.id() + 1));
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_TIMEOUT, 2);
- agent.putResponse(AgentResponse::createAllow(agentRequest.id()));
- client.process();
-}
-
-void tcag10_cancel_request_func()
-{
- std::string testNo("10");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_ALLOWED,
- CYNARA_CALL_CAUSE_CANCEL};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequest;
-
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
-
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequest.assertAction(data.m_client, data.m_user, data.m_privilege);
- client.cancel(id);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequest.assertCancel();
- agent.putResponse(AgentResponse::createCancel(id));
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_NO_TIMEOUT, 2);
-}
-
-void tcag11_cancel_processed_request_func()
-{
- std::string testNo("11");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_ALLOWED,
- CYNARA_CALL_CAUSE_CANCEL};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequest;
-
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
-
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequest.assertAction(data.m_client, data.m_user, data.m_privilege);
- agent.putResponse(AgentResponse::createCancel(id));
- client.cancel(id);
- // we do not expect getting the cancel request in the agent
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::TIMEOUT,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SERVICE_NOT_AVAILABLE, Timeout::ExpectMode::TIMEOUT);
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_NO_TIMEOUT, 2);
-}
-
-void tcag12_create_two_requests_func()
-{
- std::string testNo("12");
- CheckData data1(testNo, 1), data2(testNo, 2);
- cynara_check_id id1, id2;
- RequestEntity callbackData1 = {RequestFunction(),
- CYNARA_API_ACCESS_DENIED,
- CYNARA_CALL_CAUSE_ANSWER};
- RequestEntity callbackData2 = {RequestFunction(),
- CYNARA_API_ACCESS_ALLOWED,
- CYNARA_CALL_CAUSE_CANCEL};
-
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequest1, agentRequest2, agentRequest3;
- Client client;
- client.createRequest(data1, id1, callbackData1);
- client.assertStatus(READWRITE);
- client.createRequest(data2, id2, callbackData2);
- client.assertStatus(READWRITE);
-
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest1), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest2), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::IGNORE);
- client.cancel(id2);
- client.assertStatus(READWRITE);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest3), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequest1.assertAction(data1.m_client, data1.m_user, data1.m_privilege);
- agentRequest2.assertAction(data2.m_client, data2.m_user, data2.m_privilege);
- agentRequest3.assertCancel();
-
- agent.putResponse(AgentResponse::createDeny(id1));
- agent.putResponse(AgentResponse::createCancel(id2));
-
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_NO_TIMEOUT, 3);
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::IGNORE_TIMEOUT, 1);
-}
-
-void tcag13_create_many_requests_func()
-{
- const int numberOfRequests = 4;
- std::string testNo("13");
- cynara_check_id ids[numberOfRequests];
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_DENIED,
- CYNARA_CALL_CAUSE_ANSWER};
- loadAgentPlugin();
- setAgentPolicy();
-
- Agent agent;
- AgentRequest agentRequests[numberOfRequests];
- Client client;
- for (int i = 0; i < numberOfRequests; i++) {
- CheckData data(testNo, i);
- client.createRequest(data, ids[i], callbackData);
- client.assertStatus(READWRITE);
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequests[i]), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- agentRequests[i].assertAction(data.m_client, data.m_user, data.m_privilege);
- };
- for (int i = numberOfRequests - 1; i >= 0; i--) {
- agent.putResponse(AgentResponse::createDeny(ids[i]));
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_NO_TIMEOUT, 2);
- }
-}
-
-void tcag14_client_disconnects_func()
-{
- std::string testNo("14");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_ALLOWED,
- CYNARA_CALL_CAUSE_FINISH};
-
- loadAgentPlugin();
- setAgentPolicy();
- Agent agent;
- AgentRequest agentRequest;
- auto testTimeLimit = std::chrono::seconds(5);
- {
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- };
- auto getAgentRequestWrap = [&agent, &agentRequest]() {
- agent.getRequest(agentRequest, CYNARA_API_SUCCESS);
- };
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequestWrap);
- agentRequest.assertCancel();
-}
-
-void tcag15_agent_disconnects_func()
-{
- std::string testNo("15");
- CheckData data(testNo);
- cynara_check_id id;
- RequestEntity callbackData = {RequestFunction(),
- CYNARA_API_ACCESS_DENIED,
- CYNARA_CALL_CAUSE_ANSWER};
-
- loadAgentPlugin();
- setAgentPolicy();
- Client client;
- client.createRequest(data, id, callbackData);
- client.assertStatus(READWRITE);
- AgentRequest agentRequest;
- {
- Agent agent;
- auto testTimeLimit = std::chrono::seconds(5);
- Timeout::callAndWait(testTimeLimit, Timeout::ExpectMode::FINISHED,
- restartCynaraServiceAndSockets, getAgentRequest,
- std::ref(agent), std::ref(agentRequest), std::ref(client),
- CYNARA_API_SUCCESS, Timeout::ExpectMode::TIMEOUT);
- };
- client.process(CYNARA_API_SUCCESS, Client::TimeoutExpectation::EXPECT_NO_TIMEOUT, 2);
-}
-
-RUNNER_TEST_GROUP_INIT(cynara_agent_tests)
-
-RUN_CYNARA_TEST(tcag01_set_agent_type_policy_without_plugin)
-RUN_CYNARA_TEST(tcag02_set_agent_type_policy_with_plugin_loaded)
-RUN_CYNARA_TEST(tcag03_check_with_no_agent)
-RUN_CYNARA_TEST(tcag04_agent_initialize)
-RUN_CYNARA_TEST(tcag05_agent_request_timeout)
-RUN_CYNARA_TEST(tcag06_check_with_unregistered_agent)
-RUN_CYNARA_TEST(tcag07_get_request)
-RUN_CYNARA_TEST(tcag08_get_request_and_respond_with_wrong_id)
-RUN_CYNARA_TEST(tcag09_get_request_and_correct_responded_id)
-RUN_CYNARA_TEST(tcag10_cancel_request)
-RUN_CYNARA_TEST(tcag11_cancel_processed_request)
-RUN_CYNARA_TEST(tcag12_create_two_requests)
-RUN_CYNARA_TEST(tcag13_create_many_requests)
-RUN_CYNARA_TEST(tcag14_client_disconnects)
-RUN_CYNARA_TEST(tcag15_agent_disconnects)