From 7f8102ed77ff834045b00a4fc74e41ea7764a4e1 Mon Sep 17 00:00:00 2001 From: Lukasz Kostyra Date: Mon, 14 Dec 2015 09:50:28 +0100 Subject: [PATCH] Set Agent policy according to user provided by test case [Bug] On some occasions tests failed randomly. [Cause] Some images (ex. mobile profile on RD-PQ) had other services running in the background, which asked Cynara for privileges during tests. This caused an incorrect behavior of getAgentRequest function (timeout was expected to launch client on separate thread, instead a request was successfully processed and no timeout occured). [Solution] User in CheckData structure now does not depend on a minor number. setAgentPolicy() has additional argument - user, used to filter incoming requests. [Verification] Build, install on RD-PQ, run tests multiple times. Change-Id: Icccf09b8a72929145f624242ace14a60076761a4 --- .../common/cynara_test_client_async_client.cpp | 2 +- src/cynara-tests/test_cases_agent.cpp | 40 +++++++++++++--------- 2 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/cynara-tests/common/cynara_test_client_async_client.cpp b/src/cynara-tests/common/cynara_test_client_async_client.cpp index 32f6d37..57fc289 100644 --- a/src/cynara-tests/common/cynara_test_client_async_client.cpp +++ b/src/cynara-tests/common/cynara_test_client_async_client.cpp @@ -35,7 +35,7 @@ static std::string suffix(const std::string &major, const std::string &minor) CheckData::CheckData(const std::string &major, const std::string &minor) : m_client("client" + suffix(major, minor)), m_session("session" + suffix(major, minor)), - m_user("user" + suffix(major, minor)), + m_user("user" + suffix(major, std::string())), m_privilege("privilege" + suffix(major, minor)) { } diff --git a/src/cynara-tests/test_cases_agent.cpp b/src/cynara-tests/test_cases_agent.cpp index a26cb53..6d90e67 100644 --- a/src/cynara-tests/test_cases_agent.cpp +++ b/src/cynara-tests/test_cases_agent.cpp @@ -52,7 +52,7 @@ void loadAgentPlugin() loadServicePlugins(paths); } -void setAgentPolicy(int expectedResult = CYNARA_API_SUCCESS) +void setAgentPolicy(const std::string &user, int expectedResult = CYNARA_API_SUCCESS) { const char *bucket = CYNARA_ADMIN_DEFAULT_BUCKET; const char *wildcard = CYNARA_ADMIN_WILDCARD; @@ -63,7 +63,7 @@ void setAgentPolicy(int expectedResult = CYNARA_API_SUCCESS) auto policyType = testAgentPolicies[0].type; CynaraPoliciesContainer cp; - cp.add(bucket, wildcard, wildcard, wildcard, policyType, extra); + cp.add(bucket, wildcard, user.c_str(), wildcard, policyType, extra); Admin admin; admin.setPolicies(cp, expectedResult); @@ -89,28 +89,31 @@ void getAgentRequest(Agent &agent, AgentRequest &request, Client &client, void tcag01_set_agent_type_policy_without_plugin_func() { loadServicePlugins(DirectoryPaths()); - setAgentPolicy(CYNARA_API_INVALID_PARAM); + // user in setAgentPolicy can be empty here, it does not matter in this test + setAgentPolicy(std::string(), CYNARA_API_INVALID_PARAM); } void tcag02_set_agent_type_policy_with_plugin_loaded_func() { loadAgentPlugin(); - setAgentPolicy(); + // user in setAgentPolicy can be empty here, it does not matter in this test + setAgentPolicy(std::string()); } void tcag03_check_with_no_agent_func() { std::string testNo("03"); + CheckData data(testNo); cynara_check_id id; RequestEntity callbackData = {RequestFunction(), CYNARA_API_ACCESS_DENIED, CYNARA_CALL_CAUSE_ANSWER}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Client client; - client.createRequest({testNo}, id, callbackData); + client.createRequest(data, id, callbackData); client.assertStatus(READWRITE); //send requests @@ -140,18 +143,19 @@ void tcag05_agent_request_timeout_func() void tcag06_check_with_unregistered_agent_func() { std::string testNo("06"); + CheckData data(testNo); cynara_check_id id; RequestEntity callbackData = {RequestFunction(), CYNARA_API_ACCESS_DENIED, CYNARA_CALL_CAUSE_ANSWER}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; Client client; - client.createRequest({testNo}, id, callbackData); + client.createRequest(data, id, callbackData); client.assertStatus(READWRITE); //send requests @@ -169,7 +173,7 @@ void tcag07_get_request_func() CYNARA_CALL_CAUSE_ANSWER}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; AgentRequest agentRequest; @@ -198,7 +202,7 @@ void tcag08_get_request_and_respond_with_wrong_id_func() CYNARA_CALL_CAUSE_FINISH}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; AgentRequest agentRequest; @@ -226,7 +230,7 @@ void tcag09_get_request_and_correct_responded_id_func() CYNARA_CALL_CAUSE_ANSWER}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; AgentRequest agentRequest; @@ -256,7 +260,7 @@ void tcag10_cancel_request_func() CYNARA_CALL_CAUSE_CANCEL}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; AgentRequest agentRequest; @@ -292,7 +296,7 @@ void tcag11_cancel_processed_request_func() CYNARA_CALL_CAUSE_CANCEL}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; AgentRequest agentRequest; @@ -330,7 +334,8 @@ void tcag12_create_two_requests_func() CYNARA_CALL_CAUSE_CANCEL}; loadAgentPlugin(); - setAgentPolicy(); + // both data1 and data2 have the same user, so it does not matter which one will be used + setAgentPolicy(data1.m_user); Agent agent; AgentRequest agentRequest1, agentRequest2, agentRequest3; @@ -370,12 +375,13 @@ void tcag13_create_many_requests_func() { const int numberOfRequests = 4; std::string testNo("13"); + CheckData policyData(testNo); cynara_check_id ids[numberOfRequests]; RequestEntity callbackData = {RequestFunction(), CYNARA_API_ACCESS_DENIED, CYNARA_CALL_CAUSE_ANSWER}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(policyData.m_user); Agent agent; AgentRequest agentRequests[numberOfRequests]; @@ -407,7 +413,7 @@ void tcag14_client_disconnects_func() CYNARA_CALL_CAUSE_FINISH}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Agent agent; AgentRequest agentRequest; auto testTimeLimit = std::chrono::seconds(5); @@ -438,7 +444,7 @@ void tcag15_agent_disconnects_func() CYNARA_CALL_CAUSE_ANSWER}; loadAgentPlugin(); - setAgentPolicy(); + setAgentPolicy(data.m_user); Client client; client.createRequest(data, id, callbackData); client.assertStatus(READWRITE); -- 2.7.4