117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst/* 217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * Copyright (C) 2016 The Android Open Source Project 317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * 417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * Licensed under the Apache License, Version 2.0 (the "License"); 517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * you may not use this file except in compliance with the License. 617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * You may obtain a copy of the License at 717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * 817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * http://www.apache.org/licenses/LICENSE-2.0 917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * 1017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * Unless required by applicable law or agreed to in writing, software 1117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * distributed under the License is distributed on an "AS IS" BASIS, 1217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * See the License for the specific language governing permissions and 1417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst * limitations under the License. 1517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst */ 1617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 1717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <unistd.h> 1817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 1917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <gtest/gtest.h> 2017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <binder/IServiceManager.h> 2117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <binder/ProcessState.h> 2217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <utils/threads.h> 2317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <utils/KeyedVector.h> 2417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <utils/String8.h> 2517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <utils/SystemClock.h> 2617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst#include <VehiclePropertyAccessControlForTesting.h> 2717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 2817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstnamespace android { 2917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 3017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstclass VehiclePropertyAccessControlTest : public testing::Test { 3117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstpublic: 3217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst VehiclePropertyAccessControlTest() {} 3317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ~VehiclePropertyAccessControlTest() {} 3417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 3517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstpublic: 3617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static std::string xmlData; 3717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static std::string xmlData2; 3817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const int32_t prop1; 3917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const int32_t prop2; 4017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const int32_t prop3; 4117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const int32_t uid1; 4217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const int32_t uid2; 4317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const int32_t uid3; 4417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 4517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstprotected: 4617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst void SetUp() {} 4717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 4817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstprotected: 4917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst xmlDoc* doc; 5017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst VehiclePropertyAccessControlForTesting mVehiclePropertyAccessControl; 5117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst}; 5217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 5317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurststd::string VehiclePropertyAccessControlTest::xmlData = 5417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<ALLOW>" 5517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<PROPERTY name=\"PROP1\" value=\"0xA\">" 5617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<UID name=\"UID1\" access=\"r\" value=\"1000\"/>" 5717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "</PROPERTY>" 5817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<PROPERTY name=\"PROP2\" value=\"0xB\">" 5917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<UID name=\"UID2\" access=\"w\" value=\"2000\"/>" 6017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "</PROPERTY>" 6117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<PROPERTY name=\"PROP3\" value=\"0xC\">" 6217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "<UID name=\"UID3\" access=\"rw\" value=\"3000\"/>" 6317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "</PROPERTY>" 6417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "</ALLOW>"; 6517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 6617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstconst int32_t VehiclePropertyAccessControlTest::prop1 = 0xa; 6717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstconst int32_t VehiclePropertyAccessControlTest::prop2 = 0xb; 6817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstconst int32_t VehiclePropertyAccessControlTest::prop3 = 0xc; 6917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstconst int32_t VehiclePropertyAccessControlTest::uid1 = 1000; 7017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstconst int32_t VehiclePropertyAccessControlTest::uid2 = 2000; 7117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurstconst int32_t VehiclePropertyAccessControlTest::uid3 = 3000; 7217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 7317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam HurstTEST_F(VehiclePropertyAccessControlTest, isHexNotation) { 7417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const std::string shouldPass[] = 7517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst {"0x01234567", 7617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "0x01abcdef", 7717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "0x01ABCDEF", 7817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "0x0"}; 7917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 8017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const std::string shouldFail[] = 8117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst {"0", 8217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "0x", 8317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "01234567", 8417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "ABCDEF01", 8517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "0xabi"}; 8617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 8717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst for(auto& h : shouldPass) { 8817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.isHexNotation(h)); 8917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst } 9017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 9117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst for(auto& h : shouldFail) { 9217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.isHexNotation(h)); 9317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst } 9417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst} 9517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 9617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam HurstTEST_F(VehiclePropertyAccessControlTest, accessToInt) { 9717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const char* property = "property"; 9817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const char* uid = "uid"; 9917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst struct ShouldPassType {std::string str; int32_t value;}; 10017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const struct ShouldPassType shouldPass[] = { 10117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst {"r", VEHICLE_PROP_ACCESS_READ}, 10217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst {"w", VEHICLE_PROP_ACCESS_WRITE}, 10317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst {"rw", VEHICLE_PROP_ACCESS_READ_WRITE}, 10417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst {"wr", VEHICLE_PROP_ACCESS_READ_WRITE} 10517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst }; 10617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const char* shouldFail[] = {"rr", "ww", "rww", "rwr", "", "k"}; 10717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst int32_t value; 10817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 10917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst for(auto& h : shouldPass) { 11017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.accessToInt(&value, 11117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst (const xmlChar*)property, (const xmlChar*)uid, 11217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst (const xmlChar*)h.str.c_str())); 11317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ(h.value, value); 11417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst } 11517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 11617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst for(auto& h : shouldFail) { 11717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.accessToInt(&value, 11817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst (const xmlChar*)property, (const xmlChar*)uid, (const xmlChar*)h)); 11917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst } 12017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst} 12117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 12217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam HurstTEST_F(VehiclePropertyAccessControlTest, updateOrCreate) { 12317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst std::map<int32_t, int32_t> *accessMap; 12417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 12517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Empty the map 12617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst mVehiclePropertyAccessControl.emptyAccessControlMap(); 12717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 12817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure the property does not exist 12917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.getAccessToProperty(prop1, 13017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst &accessMap)); 13117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 13217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Create the property and give uid read access 13317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.updateOrCreate(uid1, prop1, 13417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst VEHICLE_PROP_ACCESS_READ)); 13517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 13617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure the property was created 13717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.getAccessToProperty(prop1, 13817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst &accessMap)); 13917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 14017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid has read access to the property 14117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid1], VEHICLE_PROP_ACCESS_READ); 14217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 14317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Give uid2 read/write access to the property 14417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.updateOrCreate(uid2, prop1, 14517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst VEHICLE_PROP_ACCESS_READ_WRITE)); 14617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 14717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Get the accessMap 14817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.getAccessToProperty(prop1, 14917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst &accessMap)); 15017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid2 has read/write access to the property 15117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid2], VEHICLE_PROP_ACCESS_READ_WRITE); 15217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 15317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid still has read access to the property 15417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid1], VEHICLE_PROP_ACCESS_READ); 15517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 15617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Change uid access to write for property 15717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.updateOrCreate(uid1, prop1, 15817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst VEHICLE_PROP_ACCESS_WRITE)); 15917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 16017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Get the accessMap 16117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.getAccessToProperty(prop1, 16217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst &accessMap)); 16317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 16417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid has write access to property 16517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid1], VEHICLE_PROP_ACCESS_WRITE); 16617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 16717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid2 has read write access to property 16817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid2], VEHICLE_PROP_ACCESS_READ_WRITE); 16917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst} 17017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 17117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam HurstTEST_F(VehiclePropertyAccessControlTest, populate) { 17217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst xmlNode* root_element; 17317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst std::map<int32_t, int32_t> *accessMap; 17417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 17517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Empty the map 17617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst mVehiclePropertyAccessControl.emptyAccessControlMap(); 17717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 17817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst doc = xmlReadMemory(xmlData.c_str(), xmlData.length(), NULL, NULL, 0); 17917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(doc != NULL); 18017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst root_element = xmlDocGetRootElement(doc); 18117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(root_element != NULL); 18217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 18317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst bool result = mVehiclePropertyAccessControl.populate(root_element->children); 18417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 18517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(result); 18617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 18717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Get the accessMap 18817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.getAccessToProperty(prop1, 18917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst &accessMap)); 19017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 19117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid still has read access to the property 19217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid1], VEHICLE_PROP_ACCESS_READ); 19317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 19417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Get the accessMap 19517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.getAccessToProperty(prop2, 19617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst &accessMap)); 19717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 19817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Make sure uid still has write access to the property 19917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ((*accessMap)[uid2], VEHICLE_PROP_ACCESS_WRITE); 20017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 20117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.testAccess(prop1, uid1, 0)); 20217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.testAccess(prop1, uid1, 1)); 20317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.testAccess(prop2, uid2, 1)); 20417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_FALSE(mVehiclePropertyAccessControl.testAccess(prop2, uid2, 0)); 20517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.testAccess(prop3, uid3, 1)); 20617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.testAccess(prop3, uid3, 0)); 20717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 20817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst static const std::string dump_msg = 20917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "UID 1000: property 0x0000000a, access read\n" 21017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "UID 2000: property 0x0000000b, access write\n" 21117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst "UID 3000: property 0x0000000c, access read/write\n"; 21217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 21317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst String8 msg; 21417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst mVehiclePropertyAccessControl.dump(msg); 21517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 21617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_EQ(dump_msg.compare(msg.string()), 0); 21717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 21817954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst} 21917954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst 22017954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam HurstTEST_F(VehiclePropertyAccessControlTest, init) { 22117954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst xmlFreeDoc(doc); 22217954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst xmlCleanupParser(); 22317954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst // Empty the map 22417954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst mVehiclePropertyAccessControl.emptyAccessControlMap(); 22517954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst ASSERT_TRUE(mVehiclePropertyAccessControl.init()); 22617954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst} 22717954fee2501db6ae2cb3f56bf4a2ab5c6518842Sam Hurst}; // namespace android 228