1005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Copyright 2016 The Android Open Source Project 2005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 3005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Licensed under the Apache License, Version 2.0 (the "License"); 4005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// you may not use this file except in compliance with the License. 5005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// You may obtain a copy of the License at 6005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 7005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// http://www.apache.org/licenses/LICENSE-2.0 8005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 9005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Unless required by applicable law or agreed to in writing, software 10005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// distributed under the License is distributed on an "AS IS" BASIS, 11005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// See the License for the specific language governing permissions and 13005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// limitations under the License. 14005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// 15005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 16005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan// Tests for the brillo audio client. 17005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 18005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include <binderwrapper/binder_test_base.h> 19005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include <binderwrapper/stub_binder_wrapper.h> 20005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include <gmock/gmock.h> 21005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include <gtest/gtest.h> 22005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 23005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include "audio_service_callback.h" 24005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include "brillo_audio_client.h" 25005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include "include/brillo_audio_manager.h" 26005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include "test/brillo_audio_client_mock.h" 27005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan#include "test/brillo_audio_service_mock.h" 28005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 29005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanusing android::sp; 30005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanusing android::String8; 31005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanusing testing::Return; 32005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanusing testing::_; 33005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 34005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathannamespace brillo { 35005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 36005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanstatic const char kBrilloAudioServiceName[] = 37005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan "android.brillo.brilloaudioservice.BrilloAudioService"; 38005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 39005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathanclass BrilloAudioClientTest : public android::BinderTestBase { 40005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan public: 41005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan bool ConnectClientToBAS() { 42005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan bas_ = new BrilloAudioServiceMock(); 43005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan binder_wrapper()->SetBinderForService(kBrilloAudioServiceName, bas_); 44005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan return client_.Initialize(); 45005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan } 46005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 47005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan BrilloAudioClientMock client_; 48005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan sp<BrilloAudioServiceMock> bas_; 49005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan}; 50005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 51005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, SetDeviceNoService) { 52005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 53005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ( 54005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan client_.SetDevice(AUDIO_POLICY_FORCE_USE_MAX, AUDIO_POLICY_FORCE_NONE), 55005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan ECONNABORTED); 56005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 57005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 58005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, GetDevicesNoService) { 59005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan std::vector<int> foo; 60005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 61005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.GetDevices(0, foo), ECONNABORTED); 62005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 63005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 64005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, RegisterCallbackNoService) { 65005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 66005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(nullptr, nullptr), ECONNABORTED); 67005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 68005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 69005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, UnregisterAudioCallbackNoService) { 70005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 71005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.UnregisterAudioCallback(0), ECONNABORTED); 72005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 73005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 74005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, InitializeNoService) { 75005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_FALSE(client_.Initialize()); 76005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 77005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 78005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, CheckInitializeRegistersForDeathNotifications) { 79005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 80005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 81005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan binder_wrapper()->NotifyAboutBinderDeath(bas_); 82005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 83005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 84005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, GetDevicesWithBAS) { 85005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 86005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan std::vector<int> foo; 87005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), GetDevices(0, &foo)).WillOnce(Return(Status::ok())); 88005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.GetDevices(0, foo), 0); 89005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 90005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 91005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, SetDeviceWithBAS) { 92005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 93005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan std::vector<int> foo; 94005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), 95005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan SetDevice(AUDIO_POLICY_FORCE_USE_MAX, AUDIO_POLICY_FORCE_NONE)) 96005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillOnce(Return(Status::ok())); 97005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ( 98005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan client_.SetDevice(AUDIO_POLICY_FORCE_USE_MAX, AUDIO_POLICY_FORCE_NONE), 99005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 0); 100005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 101005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 102005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, RegisterCallbackWithBAS) { 103005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 104005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan BAudioCallback bcallback; 105005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan AudioServiceCallback* callback = 106005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan new AudioServiceCallback(&bcallback, nullptr); 107005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan int id = 0; 108005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), 109005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan RegisterServiceCallback(sp<IAudioServiceCallback>(callback))) 110005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillOnce(Return(Status::ok())); 111005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(callback, &id), 0); 112005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_NE(id, 0); 113005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 114005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 115005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, RegisterSameCallbackTwiceWithBAS) { 116005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 117005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan BAudioCallback bcallback; 118005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan AudioServiceCallback* callback = 119005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan new AudioServiceCallback(&bcallback, nullptr); 120005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan int id = -1; 121005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), 122005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan RegisterServiceCallback(sp<IAudioServiceCallback>(callback))) 123005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .Times(2) 124005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillRepeatedly(Return(Status::ok())); 125005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(callback, &id), 0); 126005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_NE(id, 0); 127005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan id = -1; 128005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(callback, &id), EINVAL); 129005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(id, 0); 130005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 131005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 132005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, UnregisterAudioCallbackValidWithBAS) { 133005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 134005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan BAudioCallback bcallback; 135005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan AudioServiceCallback* callback = 136005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan new AudioServiceCallback(&bcallback, nullptr); 137005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan int id = 0; 138005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), 139005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan RegisterServiceCallback(sp<IAudioServiceCallback>(callback))) 140005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillOnce(Return(Status::ok())); 141005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(callback, &id), 0); 142005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_NE(id, 0); 143005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), 144005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan UnregisterServiceCallback(sp<IAudioServiceCallback>(callback))) 145005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillOnce(Return(Status::ok())); 146005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.UnregisterAudioCallback(id), 0); 147005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 148005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 149005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, UnregisterInvalidCallbackWithBAS) { 150005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 151005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.UnregisterAudioCallback(1), EINVAL); 152005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 153005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 154005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph NathanTEST_F(BrilloAudioClientTest, RegisterAndUnregisterAudioTwoCallbacks) { 155005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_TRUE(ConnectClientToBAS()); 156005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan BAudioCallback bcallback1, bcallback2; 157005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan AudioServiceCallback* callback1 = 158005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan new AudioServiceCallback(&bcallback1, nullptr); 159005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan AudioServiceCallback* callback2 = 160005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan new AudioServiceCallback(&bcallback2, nullptr); 161005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan int id1 = 0, id2 = 0; 162005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), RegisterServiceCallback(_)) 163005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillRepeatedly(Return(Status::ok())); 164005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(callback1, &id1), 0); 165005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_NE(id1, 0); 166005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.RegisterAudioCallback(callback2, &id2), 0); 167005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_NE(id2, 0); 168005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_CALL(*bas_.get(), UnregisterServiceCallback(_)) 169005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan .WillRepeatedly(Return(Status::ok())); 170005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.UnregisterAudioCallback(id1), 0); 171005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan EXPECT_EQ(client_.UnregisterAudioCallback(id2), 0); 172005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} 173005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan 1742bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, GetMaxVolStepsNoService) { 1752bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 1762bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan int foo; 1772bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.GetMaxVolumeSteps(BAudioUsage::kUsageInvalid, &foo), 1782bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan ECONNABORTED); 1792bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 1802bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 1812bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, GetMaxVolStepsWithBAS) { 1822bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 1832bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan int foo; 1842bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), GetMaxVolumeSteps(AUDIO_STREAM_MUSIC, &foo)) 1852bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan .WillOnce(Return(Status::ok())); 1862bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.GetMaxVolumeSteps(BAudioUsage::kUsageMedia, &foo), 0); 1872bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 1882bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 1892bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, SetMaxVolStepsNoService) { 1902bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 1912bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.SetMaxVolumeSteps(BAudioUsage::kUsageInvalid, 100), 1922bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan ECONNABORTED); 1932bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 1942bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 1952bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, SetMaxVolStepsWithBAS) { 1962bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 1972bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), SetMaxVolumeSteps(AUDIO_STREAM_MUSIC, 100)) 1982bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan .WillOnce(Return(Status::ok())); 1992bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.SetMaxVolumeSteps(BAudioUsage::kUsageMedia, 100), 0); 2002bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2012bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2022bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, SetVolIndexNoService) { 2032bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 2042bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.SetVolumeIndex( 2052bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan BAudioUsage::kUsageInvalid, AUDIO_DEVICE_NONE, 100), 2062bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan ECONNABORTED); 2072bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2082bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2092bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, SetVolIndexWithBAS) { 2102bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 2112bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), 2122bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan SetVolumeIndex(AUDIO_STREAM_MUSIC, AUDIO_DEVICE_OUT_SPEAKER, 100)) 2132bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan .WillOnce(Return(Status::ok())); 2142bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.SetVolumeIndex( 2152bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan BAudioUsage::kUsageMedia, AUDIO_DEVICE_OUT_SPEAKER, 100), 2162bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 0); 2172bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2182bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2192bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, GetVolIndexNoService) { 2202bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 2212bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan int foo; 2222bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.GetVolumeIndex( 2232bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan BAudioUsage::kUsageInvalid, AUDIO_DEVICE_NONE, &foo), 2242bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan ECONNABORTED); 2252bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2262bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2272bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, GetVolIndexWithBAS) { 2282bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 2292bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan int foo; 2302bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL( 2312bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan *bas_.get(), 2322bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan GetVolumeIndex(AUDIO_STREAM_MUSIC, AUDIO_DEVICE_OUT_SPEAKER, &foo)) 2332bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan .WillOnce(Return(Status::ok())); 2342bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.GetVolumeIndex( 2352bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan BAudioUsage::kUsageMedia, AUDIO_DEVICE_OUT_SPEAKER, &foo), 2362bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 0); 2372bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2382bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2392bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, GetVolumeControlStreamNoService) { 2402bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 2412bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan BAudioUsage foo; 2422bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.GetVolumeControlStream(&foo), ECONNABORTED); 2432bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2442bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2452bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, GetVolumeControlStreamWithBAS) { 2462bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 2472bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), GetVolumeControlStream(_)) 2482bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan .WillOnce(Return(Status::ok())); 2492bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan BAudioUsage foo; 2502bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.GetVolumeControlStream(&foo), 0); 2512bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2522bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2532bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, SetVolumeControlStreamNoService) { 2542bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 2552bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.SetVolumeControlStream(kUsageMedia), ECONNABORTED); 2562bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2572bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2582bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, SetVolumeControlStreamWithBAS) { 2592bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 2602bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), SetVolumeControlStream(AUDIO_STREAM_MUSIC)) 2612bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan .WillOnce(Return(Status::ok())); 2622bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.SetVolumeControlStream(kUsageMedia), 0); 2632bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2642bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2652bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, IncrementVolNoService) { 2662bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 2672bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.IncrementVolume(), ECONNABORTED); 2682bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2692bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2702bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, IncrementVolWithBAS) { 2712bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 2722bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), IncrementVolume()).WillOnce(Return(Status::ok())); 2732bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.IncrementVolume(), 0); 2742bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2752bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2762bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, DecrementVolNoService) { 2772bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(client_, OnBASDisconnect()); 2782bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.DecrementVolume(), ECONNABORTED); 2792bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2802bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 2812bb3192c769ec59becef0a5cd14b8747296aed7aRalph NathanTEST_F(BrilloAudioClientTest, DecrementVolWithBAS) { 2822bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_TRUE(ConnectClientToBAS()); 2832bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_CALL(*bas_.get(), DecrementVolume()).WillOnce(Return(Status::ok())); 2842bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan EXPECT_EQ(client_.DecrementVolume(), 0); 2852bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan} 2862bb3192c769ec59becef0a5cd14b8747296aed7aRalph Nathan 287005f6b52cae79dedc78a9a82fe9139a8790d6ec5Ralph Nathan} // namespace brillo 288