{
dpm_manager_destroy(m_handle);
}
- operator device_policy_manager_h () const
- {
+ operator device_policy_manager_h () const {
return m_handle;
}
operator bool () const {
m_policy_map[policy_name] = policy_applier;
}
-PolicyEnforce::Result PolicyEnforce::parsePolicy(const std::string& jsonString)
+PolicyEnforce::Result PolicyEnforce::applyPolicy(const std::string& jsonString)
{
Result result = Result::SUCCESS;
- LOG_D(TAG, "PolicyEnforce::parsePolicy");
+ LOG_D(TAG, "PolicyEnforce::applyPolicy");
try {
if (jsonString.empty()) {
}
DropPrivilege priv{this_user, dpm_user};
- DpmHandle dpmh;
+ DpmHandle dpmh;
if(!dpmh) {
LOG_E(TAG, "DPM initialization error!");
return Result::ERROR_DPM;
return result;
}
+PolicyEnforce::Result PolicyEnforce::getStates(Json::Value& policy)
+{
+ Result result = Result::SUCCESS;
+
+ LOG_D(TAG, "PolicyEnforce::getStates");
+
+ try {
+ if (policy.empty()) {
+ LOG_E(TAG, "Empty policy");
+ return Result::ERROR_PARSING;
+ }
+
+ if (policy["type"].asString() != "state-policy") {
+ LOG_E(TAG, "Invalid policy type");
+ return Result::ERROR_TYPE;
+ }
+
+ Json::Value& data = policy["data"];
+ if (data.empty()) {
+ LOG_E(TAG, "Empty policy data");
+ return Result::ERROR_DATA;
+ }
+
+ DropPrivilege priv{this_user, dpm_user};
+
+ DpmHandle dpmh;
+ if(!dpmh) {
+ LOG_E(TAG, "DPM initialization error!");
+ return Result::ERROR_DPM;
+ }
+
+ for (Json::Value& node : data) {
+ std::string name = node.get("name", "").asString();
+
+ PolicyMap::iterator it = m_policy_map.find(name);
+ if (it == m_policy_map.end()) {
+ LOG_E(TAG, "Policy \"%s\" not found", name.c_str());
+ continue;
+ }
+
+ IPolicy& applier = *(it->second);
+ if (applier.getState((device_policy_manager_h)dpmh, node) != TIZEN_ERROR_NONE) {
+ LOG_E(TAG, "Failed to get policy \"%s\" state", name.c_str());
+ }
+ }
+ } catch (std::exception& e) {
+ LOG_E(TAG, "Failed to get policy state, exception: %s", e.what());
+ result = Result::ERROR_UNKNOWN;
+ }
+
+ return result;
+}
+
} //namespace dpm
#include <gmock/gmock.h>
#include <jsoncpp/json/reader.h>
+#include <jsoncpp/json/writer.h>
#include <dpm/device-policy-manager.h>
#include <dpm/administration.h>
const std::string EMPTY = "";
const std::string INCORRECT_JSON{"qwerty"};
const std::string INVALID_POLICY_TYPE = "{\"type\":\"qwerty\"}";
-const std::string EMPTY_POLICY_DATA = "{\"type\":\"policy\",\"data\":[]}";
+const std::string SETTER_EMPTY_POLICY_DATA = "{\"type\":\"policy\",\"data\":[]}";
+const std::string GETTER_EMPTY_POLICY_DATA = "{\"type\":\"state-policy\",\"data\":[]}";
const std::string INT_POLICY_NAME = "bluetooth";
const std::string INT_POLICY_EMPTY_VALUE = "{\"type\":\"policy\",\"data\":[{\"name\":\"" + INT_POLICY_NAME + "\"}]}";
const std::string INT_POLICY_TEST = "{\"type\":\"policy\",\"data\":[{\"name\":\"" + INT_POLICY_NAME + "\",\"value\":1}]}";
const std::string IDX_POLICY_EMPTY_KEY = "{\"type\":\"policy\",\"data\":[{\"name\":\"" + IDX_POLICY_NAME + "\"}]}";
const std::string IDX_POLICY_EMPTY_VALUE = "{\"type\":\"policy\",\"data\":[{\"name\":\"" + IDX_POLICY_NAME + "\",\"key\":\"sim_id\"}]}";
const std::string IDX_POLICY_TEST = "{\"type\":\"policy\",\"data\":[{\"name\":\"" + IDX_POLICY_NAME + "\",\"key\":\"sim_id\",\"value\":1}]}";
-}
-
-TEST(TestPolicy, policy_enforce)
-{
- auto& pe = dpm::PolicyEnforce::GetInstance();
-
- EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_PARSING, pe.parsePolicy(EMPTY));
- EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_PARSING, pe.parsePolicy(INCORRECT_JSON));
- EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_TYPE, pe.parsePolicy(INVALID_POLICY_TYPE));
- EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_DATA, pe.parsePolicy(EMPTY_POLICY_DATA));
+const std::string SETTER_POLICY_TEST = "{\"type\":\"policy\",\"data\":[{\"name\":\"" + INT_POLICY_NAME + "\",\"value\":1},{\"name\":\"" + IDX_POLICY_NAME + "\",\"key\":\"sim_id\",\"value\":1}]}";
+const std::string GETTER_POLICY_TEST = "{\"type\":\"state-policy\",\"data\":[{\"name\":\"" + INT_POLICY_NAME + "\"},{\"name\":\"" + IDX_POLICY_NAME + "\",\"key\":\"sim_id\"}]}";
}
TEST(TestPolicy, integer_property_policy_setter_incorrect)
EXPECT_CALL(dpmm, dpm_restriction_set_bluetooth_mode_change_state(Eq(1))).Times(0);
EXPECT_CALL(dpmm, dpm_manager_destroy()).Times(1);
- EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.parsePolicy(INT_POLICY_EMPTY_VALUE));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.applyPolicy(INT_POLICY_EMPTY_VALUE));
}
TEST(TestPolicy, integer_property_policy_setter_correct)
EXPECT_CALL(dpmm, dpm_restriction_set_bluetooth_mode_change_state(Eq(1))).WillOnce(Return(0));
EXPECT_CALL(dpmm, dpm_manager_destroy()).Times(1);
- EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.parsePolicy(INT_POLICY_TEST));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.applyPolicy(INT_POLICY_TEST));
}
TEST(TestPolicy, integer_property_policy_getter_incorrect)
EXPECT_EQ(TIZEN_ERROR_INVALID_PARAMETER, ipp.getState(dpmh, policy));
policy["name"] = INT_POLICY_NAME;
EXPECT_EQ(TIZEN_ERROR_NOT_SUPPORTED, ipp.getState(dpmh, policy));
+ EXPECT_EQ(TIZEN_ERROR_NOT_SUPPORTED, policy.get("error", 0).asInt());
dpm_manager_destroy(dpmh);
}
Json::Value policy;
policy["name"] = INT_POLICY_NAME;
EXPECT_EQ(TIZEN_ERROR_NONE, ipp.getState(dpmh, policy));
- EXPECT_EQ(1, policy.get("supported", 0).asInt());
EXPECT_EQ(1, policy.get("value", 0).asInt());
dpm_manager_destroy(dpmh);
EXPECT_CALL(dpmm, dpm_restriction_set_messaging_state(StrEq("sim_id"),Eq(1))).Times(0);
EXPECT_CALL(dpmm, dpm_manager_destroy()).Times(2);
- EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.parsePolicy(IDX_POLICY_EMPTY_KEY));
- EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.parsePolicy(IDX_POLICY_EMPTY_VALUE));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.applyPolicy(IDX_POLICY_EMPTY_KEY));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.applyPolicy(IDX_POLICY_EMPTY_VALUE));
}
TEST(TestPolicy, indexed_property_policy_setter_correct)
EXPECT_CALL(dpmm, dpm_restriction_set_messaging_state(StrEq("sim_id"),Eq(1))).WillOnce(Return(0));
EXPECT_CALL(dpmm, dpm_manager_destroy()).Times(1);
- EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.parsePolicy(IDX_POLICY_TEST));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.applyPolicy(IDX_POLICY_TEST));
}
TEST(TestPolicy, indexed_property_policy_getter_incorrect)
EXPECT_EQ(TIZEN_ERROR_INVALID_PARAMETER, ipp.getState(dpmh, policy));
policy["key"] = "sim_id";
EXPECT_EQ(TIZEN_ERROR_NOT_SUPPORTED, ipp.getState(dpmh, policy));
+ EXPECT_EQ(TIZEN_ERROR_NOT_SUPPORTED, policy.get("error", 0).asInt());
dpm_manager_destroy(dpmh);
}
policy["name"] = IDX_POLICY_NAME;
policy["key"] = "sim_id";
EXPECT_EQ(TIZEN_ERROR_NONE, ipp.getState(dpmh, policy));
- EXPECT_EQ(1, policy.get("supported", 0).asInt());
EXPECT_EQ(1, policy.get("value", 0).asInt());
dpm_manager_destroy(dpmh);
}
+
+TEST(TestPolicy, policy_enforce_setter_incorrect)
+{
+ auto& pe = dpm::PolicyEnforce::GetInstance();
+
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_PARSING, pe.applyPolicy(EMPTY));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_PARSING, pe.applyPolicy(INCORRECT_JSON));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_TYPE, pe.applyPolicy(INVALID_POLICY_TYPE));
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_DATA, pe.applyPolicy(SETTER_EMPTY_POLICY_DATA));
+}
+
+TEST(TestPolicy, policy_enforce_setter_correct)
+{
+ DPMMock dpmm;
+
+ auto& pe = dpm::PolicyEnforce::GetInstance();
+ dpm::IntegerPropertyPolicy intpp(pe, INT_POLICY_NAME, dpm_restriction_set_bluetooth_mode_change_state);
+ dpm::IndexedPropertyPolicy idxpp(pe, IDX_POLICY_NAME, dpm_restriction_set_messaging_state);
+
+ EXPECT_CALL(dpmm, dpm_manager_create()).WillOnce(Return(&dpmm));
+ EXPECT_CALL(dpmm, dpm_restriction_set_bluetooth_mode_change_state(Eq(1))).WillOnce(Return(0));
+ EXPECT_CALL(dpmm, dpm_restriction_set_messaging_state(StrEq("sim_id"),Eq(1))).WillOnce(Return(0));
+ EXPECT_CALL(dpmm, dpm_manager_destroy()).Times(1);
+
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.applyPolicy(SETTER_POLICY_TEST));
+}
+
+TEST(TestPolicy, policy_enforce_getter_incorrect)
+{
+ auto& pe = dpm::PolicyEnforce::GetInstance();
+
+ Json::Reader reader;
+
+ Json::Value empty;
+ reader.parse(EMPTY, empty);
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_PARSING, pe.getStates(empty));
+
+ Json::Value invalid_policy_type;
+ reader.parse(INVALID_POLICY_TYPE, invalid_policy_type);
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_TYPE, pe.getStates(invalid_policy_type));
+
+ Json::Value empty_policy_data;
+ reader.parse(GETTER_EMPTY_POLICY_DATA, empty_policy_data);
+ EXPECT_EQ(dpm::PolicyEnforce::Result::ERROR_DATA, pe.getStates(empty_policy_data));
+}
+
+TEST(TestPolicy, policy_enforce_getter_correct)
+{
+ DPMMock dpmm;
+
+ auto& pe = dpm::PolicyEnforce::GetInstance();
+ dpm::IntegerPropertyPolicy intpp(pe, INT_POLICY_NAME, dpm_restriction_set_bluetooth_mode_change_state, dpm_restriction_get_bluetooth_mode_change_state);
+ dpm::IndexedPropertyPolicy idxpp(pe, IDX_POLICY_NAME, dpm_restriction_set_messaging_state, dpm_restriction_get_messaging_state);
+
+ EXPECT_CALL(dpmm, dpm_manager_create()).WillOnce(Return(&dpmm));
+ EXPECT_CALL(dpmm, dpm_restriction_get_bluetooth_mode_change_state(_)).WillOnce(Return(0));
+ EXPECT_CALL(dpmm, dpm_restriction_get_messaging_state(_,_)).WillOnce(Return(0));
+ EXPECT_CALL(dpmm, dpm_manager_destroy()).Times(1);
+
+ Json::Reader reader;
+ Json::Value policy;
+ reader.parse(GETTER_POLICY_TEST, policy);
+ EXPECT_EQ(dpm::PolicyEnforce::Result::SUCCESS, pe.getStates(policy));
+
+// Json::Value& data = policy["data"];
+// EXPECT_FALSE(data.empty());
+// for (Json::Value& node : data) {
+// EXPECT_EQ(1, node.get("value", 0).asInt());
+// }
+}