10dfa752e67116940f04a988ca4a264f7140dd81fYi Jin/* 20dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * Copyright (C) 2017 The Android Open Source Project 30dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * 40dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * Licensed under the Apache License, Version 2.0 (the "License"); 50dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * you may not use this file except in compliance with the License. 60dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * You may obtain a copy of the License at 70dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * 80dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * http://www.apache.org/licenses/LICENSE-2.0 90dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * 100dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * Unless required by applicable law or agreed to in writing, software 110dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * distributed under the License is distributed on an "AS IS" BASIS, 120dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * See the License for the specific language governing permissions and 140dfa752e67116940f04a988ca4a264f7140dd81fYi Jin * limitations under the License. 150dfa752e67116940f04a988ca4a264f7140dd81fYi Jin */ 160dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 170dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include "SystemPropertiesParser.h" 180dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 190dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include "frameworks/base/core/proto/android/os/system_properties.pb.h" 200dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 210dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include <android-base/file.h> 220dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include <android-base/test_utils.h> 230dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include <gmock/gmock.h> 2462c220b20b3fc431c27feac29a71d040fc8e2626Joe Onorato#include <google/protobuf/message_lite.h> 250dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include <gtest/gtest.h> 260dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include <string.h> 270dfa752e67116940f04a988ca4a264f7140dd81fYi Jin#include <fcntl.h> 280dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 290dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing namespace android::base; 300dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing namespace android::os; 310dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing namespace std; 320dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing ::testing::StrEq; 330dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing ::testing::Test; 340dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing ::testing::internal::CaptureStderr; 350dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing ::testing::internal::CaptureStdout; 360dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing ::testing::internal::GetCapturedStderr; 370dfa752e67116940f04a988ca4a264f7140dd81fYi Jinusing ::testing::internal::GetCapturedStdout; 380dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 390dfa752e67116940f04a988ca4a264f7140dd81fYi Jinclass SystemPropertiesParserTest : public Test { 400dfa752e67116940f04a988ca4a264f7140dd81fYi Jinpublic: 410dfa752e67116940f04a988ca4a264f7140dd81fYi Jin virtual void SetUp() override { 420dfa752e67116940f04a988ca4a264f7140dd81fYi Jin ASSERT_TRUE(tf.fd != -1); 430dfa752e67116940f04a988ca4a264f7140dd81fYi Jin } 440dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 450dfa752e67116940f04a988ca4a264f7140dd81fYi Jinprotected: 460dfa752e67116940f04a988ca4a264f7140dd81fYi Jin TemporaryFile tf; 470dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 480dfa752e67116940f04a988ca4a264f7140dd81fYi Jin const string kTestPath = GetExecutableDirectory(); 490dfa752e67116940f04a988ca4a264f7140dd81fYi Jin const string kTestDataPath = kTestPath + "/testdata/"; 500dfa752e67116940f04a988ca4a264f7140dd81fYi Jin}; 510dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 520dfa752e67116940f04a988ca4a264f7140dd81fYi JinTEST_F(SystemPropertiesParserTest, HasSwapInfo) { 530dfa752e67116940f04a988ca4a264f7140dd81fYi Jin const string testFile = kTestDataPath + "system_properties.txt"; 540dfa752e67116940f04a988ca4a264f7140dd81fYi Jin SystemPropertiesParser parser; 550dfa752e67116940f04a988ca4a264f7140dd81fYi Jin SystemPropertiesProto expected; 560dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 57f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin expected.mutable_aac_drc()->set_cut(123); 58f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin expected.mutable_aaudio()->set_hw_burst_min_usec(2000); 59f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin expected.mutable_aaudio()->set_mmap_exclusive_policy(2); 60f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin expected.mutable_dalvik_vm()->set_appimageformat("lz4"); 619299af93945376c4390cc24f5a0c1844997a694bYi Jin expected.set_drm_64bit_enabled(false); 62f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin expected.mutable_init_svc()->set_adbd( 63f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin SystemPropertiesProto_InitSvc_Status_STATUS_RUNNING); 64f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin expected.mutable_init_svc()->set_lmkd( 65f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin SystemPropertiesProto_InitSvc_Status_STATUS_STOPPED); 669299af93945376c4390cc24f5a0c1844997a694bYi Jin expected.set_media_mediadrmservice_enable(true); 679299af93945376c4390cc24f5a0c1844997a694bYi Jin 689299af93945376c4390cc24f5a0c1844997a694bYi Jin SystemPropertiesProto::Ro* ro = expected.mutable_ro(); 69f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_boot()->add_boottime("1BLL:85"); 70f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_boot()->add_boottime("1BLE:898"); 71f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_boot()->add_boottime("2BLL:0"); 72f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_boot()->add_boottime("2BLE:862"); 73f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_boot()->add_boottime("SW:6739"); 74f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_boot()->add_boottime("KL:340"); 75f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_bootimage()->set_build_date_utc(1509394807LL); 76f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_bootimage()->set_build_fingerprint( 77f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin "google/marlin/marlin:P/MASTER/jinyithu10301320:eng/dev-keys"); 78f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_hardware()->set_value("marlin"); 79f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_hardware()->set_power("marlin-profile"); 80f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_product()->add_cpu_abilist("arm64-v8a"); 81f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_product()->add_cpu_abilist("armeabi-v7a"); 82f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_product()->add_cpu_abilist("armeabi"); 83f77a07df1cc71d1f25454de1b5c7da301541b837Yi Jin ro->mutable_product()->mutable_vendor()->set_brand("google"); 840dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 850dfa752e67116940f04a988ca4a264f7140dd81fYi Jin int fd = open(testFile.c_str(), O_RDONLY); 860dfa752e67116940f04a988ca4a264f7140dd81fYi Jin ASSERT_TRUE(fd != -1); 870dfa752e67116940f04a988ca4a264f7140dd81fYi Jin 880dfa752e67116940f04a988ca4a264f7140dd81fYi Jin CaptureStdout(); 890dfa752e67116940f04a988ca4a264f7140dd81fYi Jin ASSERT_EQ(NO_ERROR, parser.Parse(fd, STDOUT_FILENO)); 9062c220b20b3fc431c27feac29a71d040fc8e2626Joe Onorato EXPECT_EQ(GetCapturedStdout(), expected.SerializeAsString()); 910dfa752e67116940f04a988ca4a264f7140dd81fYi Jin close(fd); 920dfa752e67116940f04a988ca4a264f7140dd81fYi Jin} 93