Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(263)

Side by Side Diff: device/bluetooth/bluetooth_audio_sink_chromeos_unittest.cc

Issue 1347193004: Refactor DBusThreadManager to split away BT clients. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <vector> 5 #include <vector>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
11 #include "chromeos/dbus/bluetooth_media_client.h"
12 #include "chromeos/dbus/bluetooth_media_endpoint_service_provider.h"
13 #include "chromeos/dbus/bluetooth_media_transport_client.h"
14 #include "chromeos/dbus/dbus_thread_manager.h"
15 #include "chromeos/dbus/fake_bluetooth_media_client.h"
16 #include "chromeos/dbus/fake_bluetooth_media_endpoint_service_provider.h"
17 #include "chromeos/dbus/fake_bluetooth_media_transport_client.h"
18 #include "dbus/object_path.h" 11 #include "dbus/object_path.h"
19 #include "device/bluetooth/bluetooth_adapter.h" 12 #include "device/bluetooth/bluetooth_adapter.h"
20 #include "device/bluetooth/bluetooth_adapter_factory.h" 13 #include "device/bluetooth/bluetooth_adapter_factory.h"
21 #include "device/bluetooth/bluetooth_audio_sink.h" 14 #include "device/bluetooth/bluetooth_audio_sink.h"
22 #include "device/bluetooth/bluetooth_audio_sink_chromeos.h" 15 #include "device/bluetooth/bluetooth_audio_sink_chromeos.h"
16 #include "device/bluetooth/dbus/bluetooth_media_client.h"
17 #include "device/bluetooth/dbus/bluetooth_media_endpoint_service_provider.h"
18 #include "device/bluetooth/dbus/bluetooth_media_transport_client.h"
19 #include "device/bluetooth/dbus/bluez_dbus_manager.h"
20 #include "device/bluetooth/dbus/fake_bluetooth_media_client.h"
21 #include "device/bluetooth/dbus/fake_bluetooth_media_endpoint_service_provider.h "
22 #include "device/bluetooth/dbus/fake_bluetooth_media_transport_client.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 using dbus::ObjectPath; 25 using dbus::ObjectPath;
26 using device::BluetoothAdapter; 26 using device::BluetoothAdapter;
27 using device::BluetoothAdapterFactory; 27 using device::BluetoothAdapterFactory;
28 using device::BluetoothAudioSink; 28 using device::BluetoothAudioSink;
29 29
30 namespace chromeos { 30 namespace chromeos {
31 31
32 class TestAudioSinkObserver : public BluetoothAudioSink::Observer { 32 class TestAudioSinkObserver : public BluetoothAudioSink::Observer {
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 uint16_t read_mtu_; 74 uint16_t read_mtu_;
75 BluetoothAudioSink::State state_; 75 BluetoothAudioSink::State state_;
76 76
77 private: 77 private:
78 scoped_refptr<BluetoothAudioSink> audio_sink_; 78 scoped_refptr<BluetoothAudioSink> audio_sink_;
79 }; 79 };
80 80
81 class BluetoothAudioSinkChromeOSTest : public testing::Test { 81 class BluetoothAudioSinkChromeOSTest : public testing::Test {
82 public: 82 public:
83 void SetUp() override { 83 void SetUp() override {
84 DBusThreadManager::Initialize(); 84 bluez::BluezDBusManager::Initialize(NULL, true);
85 85
86 callback_count_ = 0; 86 callback_count_ = 0;
87 error_callback_count_ = 0; 87 error_callback_count_ = 0;
88 88
89 fake_media_ = static_cast<FakeBluetoothMediaClient*>( 89 fake_media_ = static_cast<bluez::FakeBluetoothMediaClient*>(
90 DBusThreadManager::Get()->GetBluetoothMediaClient()); 90 bluez::BluezDBusManager::Get()->GetBluetoothMediaClient());
91 fake_transport_ = static_cast<FakeBluetoothMediaTransportClient*>( 91 fake_transport_ = static_cast<bluez::FakeBluetoothMediaTransportClient*>(
92 DBusThreadManager::Get()->GetBluetoothMediaTransportClient()); 92 bluez::BluezDBusManager::Get()->GetBluetoothMediaTransportClient());
93 93
94 // Initiates Delegate::TransportProperties with default values. 94 // Initiates Delegate::TransportProperties with default values.
95 properties_.device = 95 properties_.device = ObjectPath(
96 ObjectPath(FakeBluetoothMediaTransportClient::kTransportDevicePath); 96 bluez::FakeBluetoothMediaTransportClient::kTransportDevicePath);
97 properties_.uuid = BluetoothMediaClient::kBluetoothAudioSinkUUID; 97 properties_.uuid = bluez::BluetoothMediaClient::kBluetoothAudioSinkUUID;
98 properties_.codec = FakeBluetoothMediaTransportClient::kTransportCodec; 98 properties_.codec =
99 bluez::FakeBluetoothMediaTransportClient::kTransportCodec;
99 properties_.configuration = 100 properties_.configuration =
100 FakeBluetoothMediaTransportClient::kTransportConfiguration; 101 bluez::FakeBluetoothMediaTransportClient::kTransportConfiguration;
101 properties_.state = BluetoothMediaTransportClient::kStateIdle; 102 properties_.state = bluez::BluetoothMediaTransportClient::kStateIdle;
102 properties_.delay.reset( 103 properties_.delay.reset(new uint16_t(
103 new uint16_t(FakeBluetoothMediaTransportClient::kTransportDelay)); 104 bluez::FakeBluetoothMediaTransportClient::kTransportDelay));
104 properties_.volume.reset( 105 properties_.volume.reset(new uint16_t(
105 new uint16_t(FakeBluetoothMediaTransportClient::kTransportVolume)); 106 bluez::FakeBluetoothMediaTransportClient::kTransportVolume));
106 107
107 GetAdapter(); 108 GetAdapter();
108 } 109 }
109 110
110 void TearDown() override { 111 void TearDown() override {
111 callback_count_ = 0; 112 callback_count_ = 0;
112 error_callback_count_ = 0; 113 error_callback_count_ = 0;
113 observer_.reset(); 114 observer_.reset();
114 115
115 fake_media_->SetVisible(true); 116 fake_media_->SetVisible(true);
116 117
117 // The adapter should outlive audio sink. 118 // The adapter should outlive audio sink.
118 audio_sink_ = nullptr; 119 audio_sink_ = nullptr;
119 adapter_ = nullptr; 120 adapter_ = nullptr;
120 DBusThreadManager::Shutdown(); 121 bluez::BluezDBusManager::Shutdown();
121 } 122 }
122 123
123 // Gets the existing Bluetooth adapter. 124 // Gets the existing Bluetooth adapter.
124 void GetAdapter() { 125 void GetAdapter() {
125 BluetoothAdapterFactory::GetAdapter( 126 BluetoothAdapterFactory::GetAdapter(
126 base::Bind(&BluetoothAudioSinkChromeOSTest::GetAdapterCallback, 127 base::Bind(&BluetoothAudioSinkChromeOSTest::GetAdapterCallback,
127 base::Unretained(this))); 128 base::Unretained(this)));
128 } 129 }
129 130
130 // Called whenever BluetoothAdapter is retrieved successfully. 131 // Called whenever BluetoothAdapter is retrieved successfully.
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 EXPECT_EQ(error_callback_count_, 0); 172 EXPECT_EQ(error_callback_count_, 0);
172 EXPECT_EQ(observer_->state_changed_count_, 0); 173 EXPECT_EQ(observer_->state_changed_count_, 0);
173 EXPECT_EQ(observer_->volume_changed_count_, 0); 174 EXPECT_EQ(observer_->volume_changed_count_, 0);
174 } 175 }
175 176
176 void GetFakeMediaEndpoint() { 177 void GetFakeMediaEndpoint() {
177 BluetoothAudioSinkChromeOS* audio_sink_chromeos = 178 BluetoothAudioSinkChromeOS* audio_sink_chromeos =
178 static_cast<BluetoothAudioSinkChromeOS*>(audio_sink_.get()); 179 static_cast<BluetoothAudioSinkChromeOS*>(audio_sink_.get());
179 ASSERT_NE(audio_sink_chromeos, nullptr); 180 ASSERT_NE(audio_sink_chromeos, nullptr);
180 181
181 media_endpoint_ = static_cast<FakeBluetoothMediaEndpointServiceProvider*>( 182 media_endpoint_ =
182 audio_sink_chromeos->GetEndpointServiceProvider()); 183 static_cast<bluez::FakeBluetoothMediaEndpointServiceProvider*>(
184 audio_sink_chromeos->GetEndpointServiceProvider());
183 } 185 }
184 186
185 // Called whenever RegisterAudioSink is completed successfully. 187 // Called whenever RegisterAudioSink is completed successfully.
186 void RegisterCallback( 188 void RegisterCallback(
187 scoped_refptr<BluetoothAudioSink> audio_sink) { 189 scoped_refptr<BluetoothAudioSink> audio_sink) {
188 ++callback_count_; 190 ++callback_count_;
189 audio_sink_ = audio_sink; 191 audio_sink_ = audio_sink;
190 192
191 GetFakeMediaEndpoint(); 193 GetFakeMediaEndpoint();
192 ASSERT_NE(media_endpoint_, nullptr); 194 ASSERT_NE(media_endpoint_, nullptr);
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 void ErrorCallback() { 226 void ErrorCallback() {
225 ++error_callback_count_; 227 ++error_callback_count_;
226 } 228 }
227 229
228 protected: 230 protected:
229 int callback_count_; 231 int callback_count_;
230 int error_callback_count_; 232 int error_callback_count_;
231 233
232 base::MessageLoopForIO message_loop_; 234 base::MessageLoopForIO message_loop_;
233 235
234 FakeBluetoothMediaClient* fake_media_; 236 bluez::FakeBluetoothMediaClient* fake_media_;
235 FakeBluetoothMediaTransportClient* fake_transport_; 237 bluez::FakeBluetoothMediaTransportClient* fake_transport_;
236 FakeBluetoothMediaEndpointServiceProvider* media_endpoint_; 238 bluez::FakeBluetoothMediaEndpointServiceProvider* media_endpoint_;
237 scoped_ptr<TestAudioSinkObserver> observer_; 239 scoped_ptr<TestAudioSinkObserver> observer_;
238 scoped_refptr<BluetoothAdapter> adapter_; 240 scoped_refptr<BluetoothAdapter> adapter_;
239 scoped_refptr<BluetoothAudioSink> audio_sink_; 241 scoped_refptr<BluetoothAudioSink> audio_sink_;
240 242
241 // The default property set used while calling SetConfiguration on a media 243 // The default property set used while calling SetConfiguration on a media
242 // endpoint object. 244 // endpoint object.
243 BluetoothMediaEndpointServiceProvider::Delegate::TransportProperties 245 bluez::BluetoothMediaEndpointServiceProvider::Delegate::TransportProperties
244 properties_; 246 properties_;
245 }; 247 };
246 248
247 TEST_F(BluetoothAudioSinkChromeOSTest, RegisterSucceeded) { 249 TEST_F(BluetoothAudioSinkChromeOSTest, RegisterSucceeded) {
248 GetAudioSink(); 250 GetAudioSink();
249 } 251 }
250 252
251 TEST_F(BluetoothAudioSinkChromeOSTest, RegisterFailedWithInvalidOptions) { 253 TEST_F(BluetoothAudioSinkChromeOSTest, RegisterFailedWithInvalidOptions) {
252 // Sets options with an invalid codec and valid capabilities. 254 // Sets options with an invalid codec and valid capabilities.
253 BluetoothAudioSink::Options options; 255 BluetoothAudioSink::Options options;
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
777 779
778 EXPECT_EQ(audio_sink_->GetState(), BluetoothAudioSink::STATE_IDLE); 780 EXPECT_EQ(audio_sink_->GetState(), BluetoothAudioSink::STATE_IDLE);
779 EXPECT_EQ(callback_count_, 2); 781 EXPECT_EQ(callback_count_, 2);
780 EXPECT_EQ(error_callback_count_, 0); 782 EXPECT_EQ(error_callback_count_, 0);
781 EXPECT_EQ(observer_->state_changed_count_, 1); 783 EXPECT_EQ(observer_->state_changed_count_, 1);
782 EXPECT_EQ(observer_->volume_changed_count_, 1); 784 EXPECT_EQ(observer_->volume_changed_count_, 1);
783 785
784 // |kTransportVolume| is the initial volume of the transport, and this 786 // |kTransportVolume| is the initial volume of the transport, and this
785 // value is propagated to the audio sink via SetConfiguration. 787 // value is propagated to the audio sink via SetConfiguration.
786 EXPECT_EQ(audio_sink_->GetVolume(), 788 EXPECT_EQ(audio_sink_->GetVolume(),
787 FakeBluetoothMediaTransportClient::kTransportVolume); 789 bluez::FakeBluetoothMediaTransportClient::kTransportVolume);
788 790
789 // Changes volume to a valid level. 791 // Changes volume to a valid level.
790 fake_transport_->SetVolume(media_endpoint_->object_path(), 100); 792 fake_transport_->SetVolume(media_endpoint_->object_path(), 100);
791 793
792 EXPECT_EQ(audio_sink_->GetState(), BluetoothAudioSink::STATE_IDLE); 794 EXPECT_EQ(audio_sink_->GetState(), BluetoothAudioSink::STATE_IDLE);
793 EXPECT_EQ(observer_->state_changed_count_, 1); 795 EXPECT_EQ(observer_->state_changed_count_, 1);
794 EXPECT_EQ(observer_->volume_changed_count_, 2); 796 EXPECT_EQ(observer_->volume_changed_count_, 2);
795 EXPECT_EQ(audio_sink_->GetVolume(), 100); 797 EXPECT_EQ(audio_sink_->GetVolume(), 100);
796 798
797 // Changes volume to an invalid level. 799 // Changes volume to an invalid level.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
835 message_loop_.RunUntilIdle(); 837 message_loop_.RunUntilIdle();
836 838
837 // Acquire is called when the state of |audio_sink_| becomes STATE_PENDING, 839 // Acquire is called when the state of |audio_sink_| becomes STATE_PENDING,
838 // and Acquire will trigger state change. Therefore, the state will be 840 // and Acquire will trigger state change. Therefore, the state will be
839 // STATE_ACTIVE right after STATE_PENDING. 841 // STATE_ACTIVE right after STATE_PENDING.
840 // State: STATE_IDLE -> STATE_PENDING -> STATE_ACTIVE 842 // State: STATE_IDLE -> STATE_PENDING -> STATE_ACTIVE
841 EXPECT_EQ(observer_->state_changed_count_, 3); 843 EXPECT_EQ(observer_->state_changed_count_, 3);
842 EXPECT_EQ(observer_->total_read_, data_one.size()); 844 EXPECT_EQ(observer_->total_read_, data_one.size());
843 EXPECT_EQ(observer_->data_, data_one); 845 EXPECT_EQ(observer_->data_, data_one);
844 EXPECT_EQ(observer_->read_mtu_, 846 EXPECT_EQ(observer_->read_mtu_,
845 FakeBluetoothMediaTransportClient::kDefaultReadMtu); 847 bluez::FakeBluetoothMediaTransportClient::kDefaultReadMtu);
846 } 848 }
847 849
848 // Tests the case where the remote device pauses and resume audio streaming. 850 // Tests the case where the remote device pauses and resume audio streaming.
849 TEST_F(BluetoothAudioSinkChromeOSTest, PauseAndResume) { 851 TEST_F(BluetoothAudioSinkChromeOSTest, PauseAndResume) {
850 GetAudioSink(); 852 GetAudioSink();
851 853
852 media_endpoint_->SelectConfiguration( 854 media_endpoint_->SelectConfiguration(
853 std::vector<uint8_t>({0x21, 0x15, 0x33, 0x2C}), 855 std::vector<uint8_t>({0x21, 0x15, 0x33, 0x2C}),
854 base::Bind(&BluetoothAudioSinkChromeOSTest::SelectConfigurationCallback, 856 base::Bind(&BluetoothAudioSinkChromeOSTest::SelectConfigurationCallback,
855 base::Unretained(this))); 857 base::Unretained(this)));
(...skipping 16 matching lines...) Expand all
872 874
873 fake_transport_->SetState(media_endpoint_->object_path(), "pending"); 875 fake_transport_->SetState(media_endpoint_->object_path(), "pending");
874 876
875 std::vector<char> data_one(16, 0x12); 877 std::vector<char> data_one(16, 0x12);
876 fake_transport_->WriteData(media_endpoint_->object_path(), data_one); 878 fake_transport_->WriteData(media_endpoint_->object_path(), data_one);
877 879
878 message_loop_.RunUntilIdle(); 880 message_loop_.RunUntilIdle();
879 881
880 EXPECT_EQ(observer_->data_, data_one); 882 EXPECT_EQ(observer_->data_, data_one);
881 EXPECT_EQ(observer_->read_mtu_, 883 EXPECT_EQ(observer_->read_mtu_,
882 FakeBluetoothMediaTransportClient::kDefaultReadMtu); 884 bluez::FakeBluetoothMediaTransportClient::kDefaultReadMtu);
883 EXPECT_EQ(observer_->state_changed_count_, 3); 885 EXPECT_EQ(observer_->state_changed_count_, 3);
884 EXPECT_EQ(observer_->total_read_, data_one.size()); 886 EXPECT_EQ(observer_->total_read_, data_one.size());
885 887
886 // Simulates the situation where the remote device pauses and resume audio 888 // Simulates the situation where the remote device pauses and resume audio
887 // streaming. 889 // streaming.
888 fake_transport_->SetState(media_endpoint_->object_path(), "idle"); 890 fake_transport_->SetState(media_endpoint_->object_path(), "idle");
889 891
890 EXPECT_EQ(audio_sink_->GetState(), BluetoothAudioSink::STATE_IDLE); 892 EXPECT_EQ(audio_sink_->GetState(), BluetoothAudioSink::STATE_IDLE);
891 EXPECT_EQ(observer_->state_changed_count_, 4); 893 EXPECT_EQ(observer_->state_changed_count_, 4);
892 894
893 fake_transport_->SetState(media_endpoint_->object_path(), "pending"); 895 fake_transport_->SetState(media_endpoint_->object_path(), "pending");
894 896
895 std::vector<char> data_two(8, 0x10); 897 std::vector<char> data_two(8, 0x10);
896 fake_transport_->WriteData(media_endpoint_->object_path(), data_two); 898 fake_transport_->WriteData(media_endpoint_->object_path(), data_two);
897 899
898 message_loop_.RunUntilIdle(); 900 message_loop_.RunUntilIdle();
899 901
900 EXPECT_EQ(observer_->data_, data_two); 902 EXPECT_EQ(observer_->data_, data_two);
901 EXPECT_EQ(observer_->read_mtu_, 903 EXPECT_EQ(observer_->read_mtu_,
902 FakeBluetoothMediaTransportClient::kDefaultReadMtu); 904 bluez::FakeBluetoothMediaTransportClient::kDefaultReadMtu);
903 EXPECT_EQ(observer_->state_changed_count_, 6); 905 EXPECT_EQ(observer_->state_changed_count_, 6);
904 EXPECT_EQ(observer_->total_read_, data_two.size()); 906 EXPECT_EQ(observer_->total_read_, data_two.size());
905 } 907 }
906 908
907 TEST_F(BluetoothAudioSinkChromeOSTest, ContinuouslyStreaming) { 909 TEST_F(BluetoothAudioSinkChromeOSTest, ContinuouslyStreaming) {
908 GetAudioSink(); 910 GetAudioSink();
909 911
910 media_endpoint_->SelectConfiguration( 912 media_endpoint_->SelectConfiguration(
911 std::vector<uint8_t>({0x21, 0x15, 0x33, 0x2C}), 913 std::vector<uint8_t>({0x21, 0x15, 0x33, 0x2C}),
912 base::Bind(&BluetoothAudioSinkChromeOSTest::SelectConfigurationCallback, 914 base::Bind(&BluetoothAudioSinkChromeOSTest::SelectConfigurationCallback,
(...skipping 17 matching lines...) Expand all
930 932
931 fake_transport_->SetState(media_endpoint_->object_path(), "pending"); 933 fake_transport_->SetState(media_endpoint_->object_path(), "pending");
932 934
933 std::vector<char> data_one(16, 0x12); 935 std::vector<char> data_one(16, 0x12);
934 fake_transport_->WriteData(media_endpoint_->object_path(), data_one); 936 fake_transport_->WriteData(media_endpoint_->object_path(), data_one);
935 937
936 message_loop_.RunUntilIdle(); 938 message_loop_.RunUntilIdle();
937 939
938 EXPECT_EQ(observer_->data_, data_one); 940 EXPECT_EQ(observer_->data_, data_one);
939 EXPECT_EQ(observer_->read_mtu_, 941 EXPECT_EQ(observer_->read_mtu_,
940 FakeBluetoothMediaTransportClient::kDefaultReadMtu); 942 bluez::FakeBluetoothMediaTransportClient::kDefaultReadMtu);
941 EXPECT_EQ(observer_->state_changed_count_, 3); 943 EXPECT_EQ(observer_->state_changed_count_, 3);
942 EXPECT_EQ(observer_->total_read_, data_one.size()); 944 EXPECT_EQ(observer_->total_read_, data_one.size());
943 945
944 std::vector<char> data_two(8, 0x10); 946 std::vector<char> data_two(8, 0x10);
945 fake_transport_->WriteData(media_endpoint_->object_path(), data_two); 947 fake_transport_->WriteData(media_endpoint_->object_path(), data_two);
946 948
947 message_loop_.RunUntilIdle(); 949 message_loop_.RunUntilIdle();
948 950
949 EXPECT_EQ(observer_->data_, data_two); 951 EXPECT_EQ(observer_->data_, data_two);
950 EXPECT_EQ(observer_->read_mtu_, 952 EXPECT_EQ(observer_->read_mtu_,
951 FakeBluetoothMediaTransportClient::kDefaultReadMtu); 953 bluez::FakeBluetoothMediaTransportClient::kDefaultReadMtu);
952 EXPECT_EQ(observer_->state_changed_count_, 3); 954 EXPECT_EQ(observer_->state_changed_count_, 3);
953 EXPECT_EQ(observer_->total_read_, data_one.size() + data_two.size()); 955 EXPECT_EQ(observer_->total_read_, data_one.size() + data_two.size());
954 } 956 }
955 957
956 } // namespace chromeos 958 } // namespace chromeos
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_audio_sink_chromeos.cc ('k') | device/bluetooth/bluetooth_chromeos_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698