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