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

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

Issue 188473002: device/bluetooth: Remove BluetoothAdapter::Start|StopDiscovering. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed BluetoothAdapterWinTest compile errors. Created 6 years, 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/memory/scoped_vector.h"
5 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
6 #include "base/strings/utf_string_conversions.h" 7 #include "base/strings/utf_string_conversions.h"
7 #include "chromeos/dbus/fake_bluetooth_adapter_client.h" 8 #include "chromeos/dbus/fake_bluetooth_adapter_client.h"
8 #include "chromeos/dbus/fake_bluetooth_agent_manager_client.h" 9 #include "chromeos/dbus/fake_bluetooth_agent_manager_client.h"
9 #include "chromeos/dbus/fake_bluetooth_device_client.h" 10 #include "chromeos/dbus/fake_bluetooth_device_client.h"
10 #include "chromeos/dbus/fake_bluetooth_input_client.h" 11 #include "chromeos/dbus/fake_bluetooth_input_client.h"
11 #include "chromeos/dbus/fake_dbus_thread_manager.h" 12 #include "chromeos/dbus/fake_dbus_thread_manager.h"
12 #include "dbus/object_path.h" 13 #include "dbus/object_path.h"
13 #include "device/bluetooth/bluetooth_adapter.h" 14 #include "device/bluetooth/bluetooth_adapter.h"
14 #include "device/bluetooth/bluetooth_adapter_chromeos.h" 15 #include "device/bluetooth/bluetooth_adapter_chromeos.h"
(...skipping 21 matching lines...) Expand all
36 discovering_changed_count_(0), 37 discovering_changed_count_(0),
37 last_present_(false), 38 last_present_(false),
38 last_powered_(false), 39 last_powered_(false),
39 last_discovering_(false), 40 last_discovering_(false),
40 device_added_count_(0), 41 device_added_count_(0),
41 device_changed_count_(0), 42 device_changed_count_(0),
42 device_removed_count_(0), 43 device_removed_count_(0),
43 last_device_(NULL), 44 last_device_(NULL),
44 adapter_(adapter) { 45 adapter_(adapter) {
45 } 46 }
47
46 virtual ~TestObserver() {} 48 virtual ~TestObserver() {}
47 49
48 virtual void AdapterPresentChanged(BluetoothAdapter* adapter, 50 virtual void AdapterPresentChanged(BluetoothAdapter* adapter,
49 bool present) OVERRIDE { 51 bool present) OVERRIDE {
50 EXPECT_EQ(adapter_, adapter); 52 EXPECT_EQ(adapter_, adapter);
51 53
52 ++present_changed_count_; 54 ++present_changed_count_;
53 last_present_ = present; 55 last_present_ = present;
54 } 56 }
55 57
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 241
240 fake_bluetooth_adapter_client_->SetSimulationIntervalMs(10); 242 fake_bluetooth_adapter_client_->SetSimulationIntervalMs(10);
241 243
242 callback_count_ = 0; 244 callback_count_ = 0;
243 error_callback_count_ = 0; 245 error_callback_count_ = 0;
244 last_connect_error_ = BluetoothDevice::ERROR_UNKNOWN; 246 last_connect_error_ = BluetoothDevice::ERROR_UNKNOWN;
245 last_client_error_ = ""; 247 last_client_error_ = "";
246 } 248 }
247 249
248 virtual void TearDown() { 250 virtual void TearDown() {
249 if (last_discovery_session_.get() && last_discovery_session_->IsActive()) { 251 for (ScopedVector<BluetoothDiscoverySession>::iterator iter =
252 discovery_sessions_.begin();
253 iter != discovery_sessions_.end();
254 ++iter) {
255 BluetoothDiscoverySession* session = *iter;
256 if (!session->IsActive())
257 continue;
250 callback_count_ = 0; 258 callback_count_ = 0;
251 last_discovery_session_->Stop( 259 session->Stop(
252 base::Bind(&BluetoothChromeOSTest::Callback, 260 base::Bind(&BluetoothChromeOSTest::Callback,
253 base::Unretained(this)), 261 base::Unretained(this)),
254 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 262 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
255 base::Unretained(this))); 263 base::Unretained(this)));
256 message_loop_.Run(); 264 message_loop_.Run();
257 ASSERT_EQ(1, callback_count_); 265 ASSERT_EQ(1, callback_count_);
258 } 266 }
259 last_discovery_session_.reset(); 267 discovery_sessions_.clear();
260 adapter_ = NULL; 268 adapter_ = NULL;
261 DBusThreadManager::Shutdown(); 269 DBusThreadManager::Shutdown();
262 } 270 }
263 271
264 // Generic callbacks 272 // Generic callbacks
265 void Callback() { 273 void Callback() {
266 ++callback_count_; 274 ++callback_count_;
267 QuitMessageLoop(); 275 QuitMessageLoop();
268 } 276 }
269 277
270 void DiscoverySessionCallback( 278 void DiscoverySessionCallback(
271 scoped_ptr<BluetoothDiscoverySession> discovery_session) { 279 scoped_ptr<BluetoothDiscoverySession> discovery_session) {
272 ++callback_count_; 280 ++callback_count_;
273 last_discovery_session_ = discovery_session.Pass(); 281 discovery_sessions_.push_back(discovery_session.release());
274 QuitMessageLoop(); 282 QuitMessageLoop();
275 } 283 }
276 284
277 void ErrorCallback() { 285 void ErrorCallback() {
278 ++error_callback_count_; 286 ++error_callback_count_;
279 QuitMessageLoop(); 287 QuitMessageLoop();
280 } 288 }
281 289
282 void DBusErrorCallback(const std::string& error_name, 290 void DBusErrorCallback(const std::string& error_name,
283 const std::string& error_message) { 291 const std::string& error_message) {
(...skipping 26 matching lines...) Expand all
310 318
311 TestObserver observer(adapter_); 319 TestObserver observer(adapter_);
312 adapter_->AddObserver(&observer); 320 adapter_->AddObserver(&observer);
313 321
314 adapter_->SetPowered( 322 adapter_->SetPowered(
315 true, 323 true,
316 base::Bind(&BluetoothChromeOSTest::Callback, 324 base::Bind(&BluetoothChromeOSTest::Callback,
317 base::Unretained(this)), 325 base::Unretained(this)),
318 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 326 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
319 base::Unretained(this))); 327 base::Unretained(this)));
320 adapter_->StartDiscovering( 328 adapter_->StartDiscoverySession(
321 base::Bind(&BluetoothChromeOSTest::Callback, 329 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
322 base::Unretained(this)), 330 base::Unretained(this)),
323 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 331 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
324 base::Unretained(this))); 332 base::Unretained(this)));
325 base::MessageLoop::current()->Run(); 333 base::MessageLoop::current()->Run();
326 ASSERT_EQ(2, callback_count_); 334 ASSERT_EQ(2, callback_count_);
327 ASSERT_EQ(0, error_callback_count_); 335 ASSERT_EQ(0, error_callback_count_);
336 ASSERT_EQ((size_t)1, discovery_sessions_.size());
337 ASSERT_TRUE(discovery_sessions_[0]->IsActive());
328 callback_count_ = 0; 338 callback_count_ = 0;
329 339
330 ASSERT_TRUE(adapter_->IsPowered()); 340 ASSERT_TRUE(adapter_->IsPowered());
331 ASSERT_TRUE(adapter_->IsDiscovering()); 341 ASSERT_TRUE(adapter_->IsDiscovering());
332 342
333 while (!observer.device_removed_count_ && 343 while (!observer.device_removed_count_ &&
334 observer.last_device_address_ != address) 344 observer.last_device_address_ != address)
335 base::MessageLoop::current()->Run(); 345 base::MessageLoop::current()->Run();
336 346
337 adapter_->StopDiscovering( 347 discovery_sessions_[0]->Stop(
338 base::Bind(&BluetoothChromeOSTest::Callback, 348 base::Bind(&BluetoothChromeOSTest::Callback,
339 base::Unretained(this)), 349 base::Unretained(this)),
340 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 350 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
341 base::Unretained(this))); 351 base::Unretained(this)));
342 base::MessageLoop::current()->Run(); 352 base::MessageLoop::current()->Run();
343 ASSERT_EQ(1, callback_count_); 353 ASSERT_EQ(1, callback_count_);
344 ASSERT_EQ(0, error_callback_count_); 354 ASSERT_EQ(0, error_callback_count_);
345 callback_count_ = 0; 355 callback_count_ = 0;
346 356
347 ASSERT_FALSE(adapter_->IsDiscovering()); 357 ASSERT_FALSE(adapter_->IsDiscovering());
(...skipping 11 matching lines...) Expand all
359 protected: 369 protected:
360 base::MessageLoop message_loop_; 370 base::MessageLoop message_loop_;
361 FakeBluetoothAdapterClient* fake_bluetooth_adapter_client_; 371 FakeBluetoothAdapterClient* fake_bluetooth_adapter_client_;
362 FakeBluetoothDeviceClient* fake_bluetooth_device_client_; 372 FakeBluetoothDeviceClient* fake_bluetooth_device_client_;
363 scoped_refptr<BluetoothAdapter> adapter_; 373 scoped_refptr<BluetoothAdapter> adapter_;
364 374
365 int callback_count_; 375 int callback_count_;
366 int error_callback_count_; 376 int error_callback_count_;
367 enum BluetoothDevice::ConnectErrorCode last_connect_error_; 377 enum BluetoothDevice::ConnectErrorCode last_connect_error_;
368 std::string last_client_error_; 378 std::string last_client_error_;
369 scoped_ptr<BluetoothDiscoverySession> last_discovery_session_; 379 ScopedVector<BluetoothDiscoverySession> discovery_sessions_;
370 380
371 private: 381 private:
372 // Some tests use a message loop since background processing is simulated; 382 // Some tests use a message loop since background processing is simulated;
373 // break out of those loops. 383 // break out of those loops.
374 void QuitMessageLoop() { 384 void QuitMessageLoop() {
375 if (base::MessageLoop::current() && 385 if (base::MessageLoop::current() &&
376 base::MessageLoop::current()->is_running()) 386 base::MessageLoop::current()->is_running())
377 base::MessageLoop::current()->Quit(); 387 base::MessageLoop::current()->Quit();
378 } 388 }
379 }; 389 };
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
633 643
634 TEST_F(BluetoothChromeOSTest, StopDiscovery) { 644 TEST_F(BluetoothChromeOSTest, StopDiscovery) {
635 GetAdapter(); 645 GetAdapter();
636 646
637 adapter_->SetPowered( 647 adapter_->SetPowered(
638 true, 648 true,
639 base::Bind(&BluetoothChromeOSTest::Callback, 649 base::Bind(&BluetoothChromeOSTest::Callback,
640 base::Unretained(this)), 650 base::Unretained(this)),
641 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 651 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
642 base::Unretained(this))); 652 base::Unretained(this)));
643 adapter_->StartDiscovering( 653 adapter_->StartDiscoverySession(
644 base::Bind(&BluetoothChromeOSTest::Callback, 654 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
645 base::Unretained(this)), 655 base::Unretained(this)),
646 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 656 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
647 base::Unretained(this))); 657 base::Unretained(this)));
648 message_loop_.Run(); 658 message_loop_.Run();
649 EXPECT_EQ(2, callback_count_); 659 EXPECT_EQ(2, callback_count_);
650 EXPECT_EQ(0, error_callback_count_); 660 EXPECT_EQ(0, error_callback_count_);
651 callback_count_ = 0; 661 callback_count_ = 0;
652 662
653 ASSERT_TRUE(adapter_->IsPowered()); 663 ASSERT_TRUE(adapter_->IsPowered());
654 ASSERT_TRUE(adapter_->IsDiscovering()); 664 ASSERT_TRUE(adapter_->IsDiscovering());
665 ASSERT_EQ((size_t)1, discovery_sessions_.size());
666 ASSERT_TRUE(discovery_sessions_[0]->IsActive());
655 667
656 // Install an observer; aside from the callback, expect the 668 // Install an observer; aside from the callback, expect the
657 // AdapterDiscoveringChanged method to be called and no longer to be 669 // AdapterDiscoveringChanged method to be called and no longer to be
658 // discovering, 670 // discovering,
659 TestObserver observer(adapter_); 671 TestObserver observer(adapter_);
660 adapter_->AddObserver(&observer); 672 adapter_->AddObserver(&observer);
661 673
662 adapter_->StopDiscovering( 674 discovery_sessions_[0]->Stop(
663 base::Bind(&BluetoothChromeOSTest::Callback, 675 base::Bind(&BluetoothChromeOSTest::Callback,
664 base::Unretained(this)), 676 base::Unretained(this)),
665 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 677 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
666 base::Unretained(this)));
667 message_loop_.Run();
668 EXPECT_EQ(1, callback_count_);
669 EXPECT_EQ(0, error_callback_count_);
670
671 EXPECT_EQ(1, observer.discovering_changed_count_);
672 EXPECT_FALSE(observer.last_discovering_);
673
674 EXPECT_FALSE(adapter_->IsDiscovering());
675 }
676
677 TEST_F(BluetoothChromeOSTest, StopDiscoveryAfterTwoStarts) {
678 GetAdapter();
679
680 adapter_->SetPowered(
681 true,
682 base::Bind(&BluetoothChromeOSTest::Callback,
683 base::Unretained(this)),
684 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
685 base::Unretained(this)));
686 adapter_->StartDiscovering(
687 base::Bind(&BluetoothChromeOSTest::Callback,
688 base::Unretained(this)),
689 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
690 base::Unretained(this)));
691 message_loop_.Run();
692 EXPECT_EQ(2, callback_count_);
693 EXPECT_EQ(0, error_callback_count_);
694 callback_count_ = 0;
695
696 ASSERT_TRUE(adapter_->IsPowered());
697 ASSERT_TRUE(adapter_->IsDiscovering());
698
699 // Install an observer and start discovering again; only the callback
700 // should be called since we were already discovering to begin with.
701 TestObserver observer(adapter_);
702 adapter_->AddObserver(&observer);
703
704 adapter_->StartDiscovering(
705 base::Bind(&BluetoothChromeOSTest::Callback,
706 base::Unretained(this)),
707 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
708 base::Unretained(this)));
709 message_loop_.Run();
710 EXPECT_EQ(1, callback_count_);
711 EXPECT_EQ(0, error_callback_count_);
712 callback_count_ = 0;
713
714 EXPECT_EQ(0, observer.discovering_changed_count_);
715
716 // Stop discovering; only the callback should be called since we're still
717 // discovering. The adapter should be still discovering.
718 adapter_->StopDiscovering(
719 base::Bind(&BluetoothChromeOSTest::Callback,
720 base::Unretained(this)),
721 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
722 base::Unretained(this)));
723 message_loop_.Run();
724 EXPECT_EQ(1, callback_count_);
725 EXPECT_EQ(0, error_callback_count_);
726 callback_count_ = 0;
727
728 EXPECT_EQ(0, observer.discovering_changed_count_);
729
730 EXPECT_TRUE(adapter_->IsDiscovering());
731
732 // Stop discovering one more time; aside from the callback, expect the
733 // AdapterDiscoveringChanged method to be called and no longer to be
734 // discovering,
735 adapter_->StopDiscovering(
736 base::Bind(&BluetoothChromeOSTest::Callback,
737 base::Unretained(this)),
738 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
739 base::Unretained(this))); 678 base::Unretained(this)));
740 message_loop_.Run(); 679 message_loop_.Run();
741 EXPECT_EQ(1, callback_count_); 680 EXPECT_EQ(1, callback_count_);
742 EXPECT_EQ(0, error_callback_count_); 681 EXPECT_EQ(0, error_callback_count_);
743 682
744 EXPECT_EQ(1, observer.discovering_changed_count_); 683 EXPECT_EQ(1, observer.discovering_changed_count_);
745 EXPECT_FALSE(observer.last_discovering_); 684 EXPECT_FALSE(observer.last_discovering_);
746 685
747 EXPECT_FALSE(adapter_->IsDiscovering()); 686 EXPECT_FALSE(adapter_->IsDiscovering());
748 } 687 }
749 688
750 TEST_F(BluetoothChromeOSTest, Discovery) { 689 TEST_F(BluetoothChromeOSTest, Discovery) {
751 // Test a simulated discovery session. 690 // Test a simulated discovery session.
752 fake_bluetooth_device_client_->SetSimulationIntervalMs(10); 691 fake_bluetooth_device_client_->SetSimulationIntervalMs(10);
753 GetAdapter(); 692 GetAdapter();
754 693
755 TestObserver observer(adapter_); 694 TestObserver observer(adapter_);
756 adapter_->AddObserver(&observer); 695 adapter_->AddObserver(&observer);
757 696
758 adapter_->SetPowered( 697 adapter_->SetPowered(
759 true, 698 true,
760 base::Bind(&BluetoothChromeOSTest::Callback, 699 base::Bind(&BluetoothChromeOSTest::Callback,
761 base::Unretained(this)), 700 base::Unretained(this)),
762 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 701 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
763 base::Unretained(this))); 702 base::Unretained(this)));
764 adapter_->StartDiscovering( 703 adapter_->StartDiscoverySession(
765 base::Bind(&BluetoothChromeOSTest::Callback, 704 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
766 base::Unretained(this)), 705 base::Unretained(this)),
767 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 706 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
768 base::Unretained(this))); 707 base::Unretained(this)));
769 message_loop_.Run(); 708 message_loop_.Run();
770 EXPECT_EQ(2, callback_count_); 709 EXPECT_EQ(2, callback_count_);
771 EXPECT_EQ(0, error_callback_count_); 710 EXPECT_EQ(0, error_callback_count_);
772 callback_count_ = 0; 711 callback_count_ = 0;
773 712
774 ASSERT_TRUE(adapter_->IsPowered()); 713 ASSERT_TRUE(adapter_->IsPowered());
775 ASSERT_TRUE(adapter_->IsDiscovering()); 714 ASSERT_TRUE(adapter_->IsDiscovering());
715 ASSERT_EQ((size_t)1, discovery_sessions_.size());
716 ASSERT_TRUE(discovery_sessions_[0]->IsActive());
776 717
777 // First device to appear. 718 // First device to appear.
778 message_loop_.Run(); 719 message_loop_.Run();
779 720
780 EXPECT_EQ(1, observer.device_added_count_); 721 EXPECT_EQ(1, observer.device_added_count_);
781 EXPECT_EQ(FakeBluetoothDeviceClient::kLegacyAutopairAddress, 722 EXPECT_EQ(FakeBluetoothDeviceClient::kLegacyAutopairAddress,
782 observer.last_device_address_); 723 observer.last_device_address_);
783 724
784 // Next we should get another two devices... 725 // Next we should get another two devices...
785 message_loop_.Run(); 726 message_loop_.Run();
786 EXPECT_EQ(3, observer.device_added_count_); 727 EXPECT_EQ(3, observer.device_added_count_);
787 728
788 // Okay, let's run forward until a device is actually removed... 729 // Okay, let's run forward until a device is actually removed...
789 while (!observer.device_removed_count_) 730 while (!observer.device_removed_count_)
790 message_loop_.Run(); 731 message_loop_.Run();
791 732
792 EXPECT_EQ(1, observer.device_removed_count_); 733 EXPECT_EQ(1, observer.device_removed_count_);
793 EXPECT_EQ(FakeBluetoothDeviceClient::kVanishingDeviceAddress, 734 EXPECT_EQ(FakeBluetoothDeviceClient::kVanishingDeviceAddress,
794 observer.last_device_address_); 735 observer.last_device_address_);
795 } 736 }
796 737
797 TEST_F(BluetoothChromeOSTest, PoweredAndDiscovering) { 738 TEST_F(BluetoothChromeOSTest, PoweredAndDiscovering) {
798 GetAdapter(); 739 GetAdapter();
799 adapter_->SetPowered( 740 adapter_->SetPowered(
800 true, 741 true,
801 base::Bind(&BluetoothChromeOSTest::Callback, 742 base::Bind(&BluetoothChromeOSTest::Callback,
802 base::Unretained(this)), 743 base::Unretained(this)),
803 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 744 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
804 base::Unretained(this))); 745 base::Unretained(this)));
805 adapter_->StartDiscovering( 746 adapter_->StartDiscoverySession(
806 base::Bind(&BluetoothChromeOSTest::Callback, 747 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
807 base::Unretained(this)), 748 base::Unretained(this)),
808 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 749 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
809 base::Unretained(this))); 750 base::Unretained(this)));
810 message_loop_.Run(); 751 message_loop_.Run();
811 EXPECT_EQ(2, callback_count_); 752 EXPECT_EQ(2, callback_count_);
812 EXPECT_EQ(0, error_callback_count_); 753 EXPECT_EQ(0, error_callback_count_);
813 callback_count_ = 0; 754 callback_count_ = 0;
755 ASSERT_EQ((size_t)1, discovery_sessions_.size());
756 ASSERT_TRUE(discovery_sessions_[0]->IsActive());
814 757
815 // Stop the timers that the simulation uses 758 // Stop the timers that the simulation uses
816 fake_bluetooth_device_client_->EndDiscoverySimulation( 759 fake_bluetooth_device_client_->EndDiscoverySimulation(
817 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); 760 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
818 761
819 ASSERT_TRUE(adapter_->IsPowered()); 762 ASSERT_TRUE(adapter_->IsPowered());
820 ASSERT_TRUE(adapter_->IsDiscovering()); 763 ASSERT_TRUE(adapter_->IsDiscovering());
821 764
822 fake_bluetooth_adapter_client_->SetVisible(false); 765 fake_bluetooth_adapter_client_->SetVisible(false);
823 ASSERT_FALSE(adapter_->IsPresent()); 766 ASSERT_FALSE(adapter_->IsPresent());
767 ASSERT_FALSE(discovery_sessions_[0]->IsActive());
824 768
825 // Install an observer; expect the AdapterPresentChanged, 769 // Install an observer; expect the AdapterPresentChanged,
826 // AdapterPoweredChanged and AdapterDiscoveringChanged methods to be called 770 // AdapterPoweredChanged and AdapterDiscoveringChanged methods to be called
827 // with true, and IsPresent(), IsPowered() and IsDiscovering() to all 771 // with true, and IsPresent(), IsPowered() and IsDiscovering() to all
828 // return true. 772 // return true.
829 TestObserver observer(adapter_); 773 TestObserver observer(adapter_);
830 adapter_->AddObserver(&observer); 774 adapter_->AddObserver(&observer);
831 775
832 fake_bluetooth_adapter_client_->SetVisible(true); 776 fake_bluetooth_adapter_client_->SetVisible(true);
833 777
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
881 825
882 TestObserver observer(adapter_); 826 TestObserver observer(adapter_);
883 adapter_->AddObserver(&observer); 827 adapter_->AddObserver(&observer);
884 828
885 EXPECT_EQ(0, observer.discovering_changed_count_); 829 EXPECT_EQ(0, observer.discovering_changed_count_);
886 EXPECT_FALSE(observer.last_discovering_); 830 EXPECT_FALSE(observer.last_discovering_);
887 EXPECT_FALSE(adapter_->IsDiscovering()); 831 EXPECT_FALSE(adapter_->IsDiscovering());
888 832
889 // Request device discovery 3 times. 833 // Request device discovery 3 times.
890 for (int i = 0; i < 3; i++) { 834 for (int i = 0; i < 3; i++) {
891 adapter_->StartDiscovering( 835 adapter_->StartDiscoverySession(
892 base::Bind(&BluetoothChromeOSTest::Callback, 836 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
893 base::Unretained(this)), 837 base::Unretained(this)),
894 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 838 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
895 base::Unretained(this))); 839 base::Unretained(this)));
896 } 840 }
897 // Run only once, as there should have been one D-Bus call. 841 // Run only once, as there should have been one D-Bus call.
898 message_loop_.Run(); 842 message_loop_.Run();
899 843
900 // The observer should have received the discovering changed event exactly 844 // The observer should have received the discovering changed event exactly
901 // once, the success callback should have been called 3 times and the adapter 845 // once, the success callback should have been called 3 times and the adapter
902 // should be discovering. 846 // should be discovering.
903 EXPECT_EQ(1, observer.discovering_changed_count_); 847 EXPECT_EQ(1, observer.discovering_changed_count_);
904 EXPECT_EQ(3, callback_count_); 848 EXPECT_EQ(3, callback_count_);
905 EXPECT_EQ(0, error_callback_count_); 849 EXPECT_EQ(0, error_callback_count_);
906 EXPECT_TRUE(observer.last_discovering_); 850 EXPECT_TRUE(observer.last_discovering_);
907 EXPECT_TRUE(adapter_->IsDiscovering()); 851 EXPECT_TRUE(adapter_->IsDiscovering());
852 ASSERT_EQ((size_t)3, discovery_sessions_.size());
908 853
909 // Request to stop discovery twice. 854 // Request to stop discovery twice.
910 for (int i = 0; i < 2; i++) { 855 for (int i = 0; i < 2; i++) {
911 adapter_->StopDiscovering( 856 discovery_sessions_[i]->Stop(
912 base::Bind(&BluetoothChromeOSTest::Callback, 857 base::Bind(&BluetoothChromeOSTest::Callback,
913 base::Unretained(this)), 858 base::Unretained(this)),
914 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 859 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
915 base::Unretained(this))); 860 base::Unretained(this)));
916 } 861 }
917 862
918 // The observer should have received no additional discovering changed events, 863 // The observer should have received no additional discovering changed events,
919 // the success callback should have been called 2 times and the adapter should 864 // the success callback should have been called 2 times and the adapter should
920 // still be discovering. 865 // still be discovering.
921 EXPECT_EQ(1, observer.discovering_changed_count_); 866 EXPECT_EQ(1, observer.discovering_changed_count_);
922 EXPECT_EQ(5, callback_count_); 867 EXPECT_EQ(5, callback_count_);
923 EXPECT_EQ(0, error_callback_count_); 868 EXPECT_EQ(0, error_callback_count_);
924 EXPECT_TRUE(observer.last_discovering_); 869 EXPECT_TRUE(observer.last_discovering_);
925 EXPECT_TRUE(adapter_->IsDiscovering()); 870 EXPECT_TRUE(adapter_->IsDiscovering());
871 EXPECT_TRUE(adapter_->IsDiscovering());
872 EXPECT_FALSE(discovery_sessions_[0]->IsActive());
873 EXPECT_FALSE(discovery_sessions_[1]->IsActive());
874 EXPECT_TRUE(discovery_sessions_[2]->IsActive());
926 875
927 // Request device discovery 3 times. 876 // Request device discovery 3 times.
928 for (int i = 0; i < 3; i++) { 877 for (int i = 0; i < 3; i++) {
929 adapter_->StartDiscovering( 878 adapter_->StartDiscoverySession(
930 base::Bind(&BluetoothChromeOSTest::Callback, 879 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
931 base::Unretained(this)), 880 base::Unretained(this)),
932 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 881 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
933 base::Unretained(this))); 882 base::Unretained(this)));
934 } 883 }
935 884
936 // The observer should have received no additional discovering changed events, 885 // The observer should have received no additional discovering changed events,
937 // the success callback should have been called 3 times and the adapter should 886 // the success callback should have been called 3 times and the adapter should
938 // still be discovering. 887 // still be discovering.
939 EXPECT_EQ(1, observer.discovering_changed_count_); 888 EXPECT_EQ(1, observer.discovering_changed_count_);
940 EXPECT_EQ(8, callback_count_); 889 EXPECT_EQ(8, callback_count_);
941 EXPECT_EQ(0, error_callback_count_); 890 EXPECT_EQ(0, error_callback_count_);
942 EXPECT_TRUE(observer.last_discovering_); 891 EXPECT_TRUE(observer.last_discovering_);
943 EXPECT_TRUE(adapter_->IsDiscovering()); 892 EXPECT_TRUE(adapter_->IsDiscovering());
893 ASSERT_EQ((size_t)6, discovery_sessions_.size());
944 894
945 // Request to stop discovery 4 times. 895 // Request to stop discovery 4 times.
946 for (int i = 0; i < 4; i++) { 896 for (int i = 2; i < 6; i++) {
947 adapter_->StopDiscovering( 897 discovery_sessions_[i]->Stop(
948 base::Bind(&BluetoothChromeOSTest::Callback, 898 base::Bind(&BluetoothChromeOSTest::Callback,
949 base::Unretained(this)), 899 base::Unretained(this)),
950 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 900 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
951 base::Unretained(this))); 901 base::Unretained(this)));
952 } 902 }
953 // Run only once, as there should have been one D-Bus call. 903 // Run only once, as there should have been one D-Bus call.
954 message_loop_.Run(); 904 message_loop_.Run();
955 905
956 // The observer should have received the discovering changed event exactly 906 // The observer should have received the discovering changed event exactly
957 // once, the success callback should have been called 4 times and the adapter 907 // once, the success callback should have been called 4 times and the adapter
958 // should no longer be discovering. 908 // should no longer be discovering.
959 EXPECT_EQ(2, observer.discovering_changed_count_); 909 EXPECT_EQ(2, observer.discovering_changed_count_);
960 EXPECT_EQ(12, callback_count_); 910 EXPECT_EQ(12, callback_count_);
961 EXPECT_EQ(0, error_callback_count_); 911 EXPECT_EQ(0, error_callback_count_);
962 EXPECT_FALSE(observer.last_discovering_); 912 EXPECT_FALSE(observer.last_discovering_);
963 EXPECT_FALSE(adapter_->IsDiscovering()); 913 EXPECT_FALSE(adapter_->IsDiscovering());
964 914
965 // Request to stop discovery once. 915 // All discovery sessions should be inactive.
966 adapter_->StopDiscovering( 916 for (int i = 0; i < 6; i++)
917 EXPECT_FALSE(discovery_sessions_[i]->IsActive());
918
919 // Request to stop discovery on of the inactive sessions.
920 discovery_sessions_[0]->Stop(
967 base::Bind(&BluetoothChromeOSTest::Callback, 921 base::Bind(&BluetoothChromeOSTest::Callback,
968 base::Unretained(this)), 922 base::Unretained(this)),
969 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 923 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
970 base::Unretained(this))); 924 base::Unretained(this)));
971 925
972 // The call should have failed. 926 // The call should have failed.
973 EXPECT_EQ(2, observer.discovering_changed_count_); 927 EXPECT_EQ(2, observer.discovering_changed_count_);
974 EXPECT_EQ(12, callback_count_); 928 EXPECT_EQ(12, callback_count_);
975 EXPECT_EQ(1, error_callback_count_); 929 EXPECT_EQ(1, error_callback_count_);
976 EXPECT_FALSE(observer.last_discovering_); 930 EXPECT_FALSE(observer.last_discovering_);
(...skipping 19 matching lines...) Expand all
996 950
997 TestObserver observer(adapter_); 951 TestObserver observer(adapter_);
998 adapter_->AddObserver(&observer); 952 adapter_->AddObserver(&observer);
999 953
1000 EXPECT_EQ(0, observer.discovering_changed_count_); 954 EXPECT_EQ(0, observer.discovering_changed_count_);
1001 EXPECT_FALSE(observer.last_discovering_); 955 EXPECT_FALSE(observer.last_discovering_);
1002 EXPECT_FALSE(adapter_->IsDiscovering()); 956 EXPECT_FALSE(adapter_->IsDiscovering());
1003 957
1004 // Request device discovery 3 times. 958 // Request device discovery 3 times.
1005 for (int i = 0; i < 3; i++) { 959 for (int i = 0; i < 3; i++) {
1006 adapter_->StartDiscovering( 960 adapter_->StartDiscoverySession(
1007 base::Bind(&BluetoothChromeOSTest::Callback, 961 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1008 base::Unretained(this)), 962 base::Unretained(this)),
1009 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 963 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1010 base::Unretained(this))); 964 base::Unretained(this)));
1011 } 965 }
1012 // Run only once, as there should have been one D-Bus call. 966 // Run only once, as there should have been one D-Bus call.
1013 message_loop_.Run(); 967 message_loop_.Run();
1014 968
1015 // The observer should have received the discovering changed event exactly 969 // The observer should have received the discovering changed event exactly
1016 // once, the success callback should have been called 3 times and the adapter 970 // once, the success callback should have been called 3 times and the adapter
1017 // should be discovering. 971 // should be discovering.
1018 EXPECT_EQ(1, observer.discovering_changed_count_); 972 EXPECT_EQ(1, observer.discovering_changed_count_);
1019 EXPECT_EQ(3, callback_count_); 973 EXPECT_EQ(3, callback_count_);
1020 EXPECT_EQ(0, error_callback_count_); 974 EXPECT_EQ(0, error_callback_count_);
1021 EXPECT_TRUE(observer.last_discovering_); 975 EXPECT_TRUE(observer.last_discovering_);
1022 EXPECT_TRUE(adapter_->IsDiscovering()); 976 EXPECT_TRUE(adapter_->IsDiscovering());
977 ASSERT_EQ((size_t)3, discovery_sessions_.size());
978
979 for (int i = 0; i < 3; i++)
980 EXPECT_TRUE(discovery_sessions_[i]->IsActive());
1023 981
1024 // Stop the timers that the simulation uses 982 // Stop the timers that the simulation uses
1025 fake_bluetooth_device_client_->EndDiscoverySimulation( 983 fake_bluetooth_device_client_->EndDiscoverySimulation(
1026 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); 984 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
1027 985
1028 ASSERT_TRUE(adapter_->IsPowered()); 986 ASSERT_TRUE(adapter_->IsPowered());
1029 ASSERT_TRUE(adapter_->IsDiscovering()); 987 ASSERT_TRUE(adapter_->IsDiscovering());
1030 988
1031 // Stop device discovery behind the adapter. The adapter and the observer 989 // Stop device discovery behind the adapter. The adapter and the observer
1032 // should be notified of the change and the reference count should be reset. 990 // should be notified of the change and the reference count should be reset.
1033 // Even though FakeBluetoothAdapterClient does its own reference counting and 991 // Even though FakeBluetoothAdapterClient does its own reference counting and
1034 // we called 3 BluetoothAdapter::StartDiscovering 3 times, the 992 // we called 3 BluetoothAdapter::StartDiscoverySession 3 times, the
1035 // FakeBluetoothAdapterClient's count should be only 1 and a single call to 993 // FakeBluetoothAdapterClient's count should be only 1 and a single call to
1036 // FakeBluetoothAdapterClient::StopDiscovery should work. 994 // FakeBluetoothAdapterClient::StopDiscovery should work.
1037 fake_bluetooth_adapter_client_->StopDiscovery( 995 fake_bluetooth_adapter_client_->StopDiscovery(
1038 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), 996 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
1039 base::Bind(&BluetoothChromeOSTest::Callback, 997 base::Bind(&BluetoothChromeOSTest::Callback,
1040 base::Unretained(this)), 998 base::Unretained(this)),
1041 base::Bind(&BluetoothChromeOSTest::DBusErrorCallback, 999 base::Bind(&BluetoothChromeOSTest::DBusErrorCallback,
1042 base::Unretained(this))); 1000 base::Unretained(this)));
1043 message_loop_.Run(); 1001 message_loop_.Run();
1044 EXPECT_EQ(2, observer.discovering_changed_count_); 1002 EXPECT_EQ(2, observer.discovering_changed_count_);
1045 EXPECT_EQ(4, callback_count_); 1003 EXPECT_EQ(4, callback_count_);
1046 EXPECT_EQ(0, error_callback_count_); 1004 EXPECT_EQ(0, error_callback_count_);
1047 EXPECT_FALSE(observer.last_discovering_); 1005 EXPECT_FALSE(observer.last_discovering_);
1048 EXPECT_FALSE(adapter_->IsDiscovering()); 1006 EXPECT_FALSE(adapter_->IsDiscovering());
1049 1007
1008 // All discovery session instances should have been updated.
1009 for (int i = 0; i < 3; i++)
1010 EXPECT_FALSE(discovery_sessions_[i]->IsActive());
1011 discovery_sessions_.clear();
1012
1050 // It should be possible to successfully start discovery. 1013 // It should be possible to successfully start discovery.
1051 for (int i = 0; i < 2; i++) { 1014 for (int i = 0; i < 2; i++) {
1052 adapter_->StartDiscovering( 1015 adapter_->StartDiscoverySession(
1053 base::Bind(&BluetoothChromeOSTest::Callback, 1016 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1054 base::Unretained(this)), 1017 base::Unretained(this)),
1055 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1018 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1056 base::Unretained(this))); 1019 base::Unretained(this)));
1057 } 1020 }
1058 // Run only once, as there should have been one D-Bus call. 1021 // Run only once, as there should have been one D-Bus call.
1059 message_loop_.Run(); 1022 message_loop_.Run();
1060 EXPECT_EQ(3, observer.discovering_changed_count_); 1023 EXPECT_EQ(3, observer.discovering_changed_count_);
1061 EXPECT_EQ(6, callback_count_); 1024 EXPECT_EQ(6, callback_count_);
1062 EXPECT_EQ(0, error_callback_count_); 1025 EXPECT_EQ(0, error_callback_count_);
1063 EXPECT_TRUE(observer.last_discovering_); 1026 EXPECT_TRUE(observer.last_discovering_);
1064 EXPECT_TRUE(adapter_->IsDiscovering()); 1027 EXPECT_TRUE(adapter_->IsDiscovering());
1028 ASSERT_EQ((size_t)2, discovery_sessions_.size());
1029
1030 for (int i = 0; i < 2; i++)
1031 EXPECT_TRUE(discovery_sessions_[i]->IsActive());
1065 1032
1066 fake_bluetooth_device_client_->EndDiscoverySimulation( 1033 fake_bluetooth_device_client_->EndDiscoverySimulation(
1067 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); 1034 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
1068 1035
1069 // Make the adapter disappear and appear. This will make it come back as 1036 // Make the adapter disappear and appear. This will make it come back as
1070 // discovering. When this happens, the reference count should become and 1037 // discovering. When this happens, the reference count should become and
1071 // remain 0 as no new request was made through the BluetoothAdapter. 1038 // remain 0 as no new request was made through the BluetoothAdapter.
1072 fake_bluetooth_adapter_client_->SetVisible(false); 1039 fake_bluetooth_adapter_client_->SetVisible(false);
1073 ASSERT_FALSE(adapter_->IsPresent()); 1040 ASSERT_FALSE(adapter_->IsPresent());
1074 EXPECT_EQ(4, observer.discovering_changed_count_); 1041 EXPECT_EQ(4, observer.discovering_changed_count_);
1075 EXPECT_EQ(6, callback_count_); 1042 EXPECT_EQ(6, callback_count_);
1076 EXPECT_EQ(0, error_callback_count_); 1043 EXPECT_EQ(0, error_callback_count_);
1077 EXPECT_FALSE(observer.last_discovering_); 1044 EXPECT_FALSE(observer.last_discovering_);
1078 EXPECT_FALSE(adapter_->IsDiscovering()); 1045 EXPECT_FALSE(adapter_->IsDiscovering());
1079 1046
1047 for (int i = 0; i < 2; i++)
1048 EXPECT_FALSE(discovery_sessions_[i]->IsActive());
1049 discovery_sessions_.clear();
1050
1080 fake_bluetooth_adapter_client_->SetVisible(true); 1051 fake_bluetooth_adapter_client_->SetVisible(true);
1081 ASSERT_TRUE(adapter_->IsPresent()); 1052 ASSERT_TRUE(adapter_->IsPresent());
1082 EXPECT_EQ(5, observer.discovering_changed_count_); 1053 EXPECT_EQ(5, observer.discovering_changed_count_);
1083 EXPECT_EQ(6, callback_count_); 1054 EXPECT_EQ(6, callback_count_);
1084 EXPECT_EQ(0, error_callback_count_); 1055 EXPECT_EQ(0, error_callback_count_);
1085 EXPECT_TRUE(observer.last_discovering_); 1056 EXPECT_TRUE(observer.last_discovering_);
1086 EXPECT_TRUE(adapter_->IsDiscovering()); 1057 EXPECT_TRUE(adapter_->IsDiscovering());
1087 1058
1088 // Start and stop discovery. At this point, FakeBluetoothAdapterClient has 1059 // Start and stop discovery. At this point, FakeBluetoothAdapterClient has
1089 // a reference count that is equal to 1. Pretend that this was done by an 1060 // a reference count that is equal to 1. Pretend that this was done by an
1090 // application other than us. Starting and stopping discovery will succeed 1061 // application other than us. Starting and stopping discovery will succeed
1091 // but it won't cause the discovery state to change. 1062 // but it won't cause the discovery state to change.
1092 adapter_->StartDiscovering( 1063 adapter_->StartDiscoverySession(
1093 base::Bind(&BluetoothChromeOSTest::Callback, 1064 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1094 base::Unretained(this)), 1065 base::Unretained(this)),
1095 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1066 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1096 base::Unretained(this))); 1067 base::Unretained(this)));
1097 message_loop_.Run(); // Run the loop, as there should have been a D-Bus call. 1068 message_loop_.Run(); // Run the loop, as there should have been a D-Bus call.
1098 EXPECT_EQ(5, observer.discovering_changed_count_); 1069 EXPECT_EQ(5, observer.discovering_changed_count_);
1099 EXPECT_EQ(7, callback_count_); 1070 EXPECT_EQ(7, callback_count_);
1100 EXPECT_EQ(0, error_callback_count_); 1071 EXPECT_EQ(0, error_callback_count_);
1101 EXPECT_TRUE(observer.last_discovering_); 1072 EXPECT_TRUE(observer.last_discovering_);
1102 EXPECT_TRUE(adapter_->IsDiscovering()); 1073 EXPECT_TRUE(adapter_->IsDiscovering());
1074 ASSERT_EQ((size_t)1, discovery_sessions_.size());
1075 EXPECT_TRUE(discovery_sessions_[0]->IsActive());
1103 1076
1104 adapter_->StopDiscovering( 1077 discovery_sessions_[0]->Stop(
1105 base::Bind(&BluetoothChromeOSTest::Callback, 1078 base::Bind(&BluetoothChromeOSTest::Callback,
1106 base::Unretained(this)), 1079 base::Unretained(this)),
1107 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1080 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1108 base::Unretained(this))); 1081 base::Unretained(this)));
1109 message_loop_.Run(); // Run the loop, as there should have been a D-Bus call. 1082 message_loop_.Run(); // Run the loop, as there should have been a D-Bus call.
1110 EXPECT_EQ(5, observer.discovering_changed_count_); 1083 EXPECT_EQ(5, observer.discovering_changed_count_);
1111 EXPECT_EQ(8, callback_count_); 1084 EXPECT_EQ(8, callback_count_);
1112 EXPECT_EQ(0, error_callback_count_); 1085 EXPECT_EQ(0, error_callback_count_);
1113 EXPECT_TRUE(observer.last_discovering_); 1086 EXPECT_TRUE(observer.last_discovering_);
1114 EXPECT_TRUE(adapter_->IsDiscovering()); 1087 EXPECT_TRUE(adapter_->IsDiscovering());
1088 EXPECT_FALSE(discovery_sessions_[0]->IsActive());
1089 discovery_sessions_.clear();
1115 1090
1116 // Start discovery again. 1091 // Start discovery again.
1117 adapter_->StartDiscovering( 1092 adapter_->StartDiscoverySession(
1118 base::Bind(&BluetoothChromeOSTest::Callback, 1093 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1119 base::Unretained(this)), 1094 base::Unretained(this)),
1120 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1095 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1121 base::Unretained(this))); 1096 base::Unretained(this)));
1122 message_loop_.Run(); // Run the loop, as there should have been a D-Bus call. 1097 message_loop_.Run(); // Run the loop, as there should have been a D-Bus call.
1123 EXPECT_EQ(5, observer.discovering_changed_count_); 1098 EXPECT_EQ(5, observer.discovering_changed_count_);
1124 EXPECT_EQ(9, callback_count_); 1099 EXPECT_EQ(9, callback_count_);
1125 EXPECT_EQ(0, error_callback_count_); 1100 EXPECT_EQ(0, error_callback_count_);
1126 EXPECT_TRUE(observer.last_discovering_); 1101 EXPECT_TRUE(observer.last_discovering_);
1127 EXPECT_TRUE(adapter_->IsDiscovering()); 1102 EXPECT_TRUE(adapter_->IsDiscovering());
1103 ASSERT_EQ((size_t)1, discovery_sessions_.size());
1104 EXPECT_TRUE(discovery_sessions_[0]->IsActive());
1128 1105
1129 // Stop discovery via D-Bus. The fake client's reference count will drop but 1106 // Stop discovery via D-Bus. The fake client's reference count will drop but
1130 // the discovery state won't change since our BluetoothAdapter also just 1107 // the discovery state won't change since our BluetoothAdapter also just
1131 // requested it via D-Bus. 1108 // requested it via D-Bus.
1132 fake_bluetooth_adapter_client_->StopDiscovery( 1109 fake_bluetooth_adapter_client_->StopDiscovery(
1133 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath), 1110 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
1134 base::Bind(&BluetoothChromeOSTest::Callback, 1111 base::Bind(&BluetoothChromeOSTest::Callback,
1135 base::Unretained(this)), 1112 base::Unretained(this)),
1136 base::Bind(&BluetoothChromeOSTest::DBusErrorCallback, 1113 base::Bind(&BluetoothChromeOSTest::DBusErrorCallback,
1137 base::Unretained(this))); 1114 base::Unretained(this)));
1138 message_loop_.Run(); 1115 message_loop_.Run();
1139 EXPECT_EQ(5, observer.discovering_changed_count_); 1116 EXPECT_EQ(5, observer.discovering_changed_count_);
1140 EXPECT_EQ(10, callback_count_); 1117 EXPECT_EQ(10, callback_count_);
1141 EXPECT_EQ(0, error_callback_count_); 1118 EXPECT_EQ(0, error_callback_count_);
1142 EXPECT_TRUE(observer.last_discovering_); 1119 EXPECT_TRUE(observer.last_discovering_);
1143 EXPECT_TRUE(adapter_->IsDiscovering()); 1120 EXPECT_TRUE(adapter_->IsDiscovering());
1144 1121
1145 // Now end the discovery session. This should change the adapter's discovery 1122 // Now end the discovery session. This should change the adapter's discovery
1146 // state. 1123 // state.
1147 adapter_->StopDiscovering( 1124 discovery_sessions_[0]->Stop(
1148 base::Bind(&BluetoothChromeOSTest::Callback, 1125 base::Bind(&BluetoothChromeOSTest::Callback,
1149 base::Unretained(this)), 1126 base::Unretained(this)),
1150 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1127 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1151 base::Unretained(this))); 1128 base::Unretained(this)));
1152 message_loop_.Run(); 1129 message_loop_.Run();
1153 EXPECT_EQ(6, observer.discovering_changed_count_); 1130 EXPECT_EQ(6, observer.discovering_changed_count_);
1154 EXPECT_EQ(11, callback_count_); 1131 EXPECT_EQ(11, callback_count_);
1155 EXPECT_EQ(0, error_callback_count_); 1132 EXPECT_EQ(0, error_callback_count_);
1156 EXPECT_FALSE(observer.last_discovering_); 1133 EXPECT_FALSE(observer.last_discovering_);
1157 EXPECT_FALSE(adapter_->IsDiscovering()); 1134 EXPECT_FALSE(adapter_->IsDiscovering());
1135 EXPECT_FALSE(discovery_sessions_[0]->IsActive());
1136
1137 adapter_->RemoveObserver(&observer);
1138 }
1139
1140 TEST_F(BluetoothChromeOSTest, InvalidatedDiscoverySessions) {
1141 GetAdapter();
1142 adapter_->SetPowered(
1143 true,
1144 base::Bind(&BluetoothChromeOSTest::Callback,
1145 base::Unretained(this)),
1146 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1147 base::Unretained(this)));
1148 EXPECT_EQ(1, callback_count_);
1149 EXPECT_EQ(0, error_callback_count_);
1150 EXPECT_TRUE(adapter_->IsPowered());
1151 callback_count_ = 0;
1152
1153 TestObserver observer(adapter_);
1154 adapter_->AddObserver(&observer);
1155
1156 EXPECT_EQ(0, observer.discovering_changed_count_);
1157 EXPECT_FALSE(observer.last_discovering_);
1158 EXPECT_FALSE(adapter_->IsDiscovering());
1159
1160 // Request device discovery 3 times.
1161 for (int i = 0; i < 3; i++) {
1162 adapter_->StartDiscoverySession(
1163 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1164 base::Unretained(this)),
1165 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1166 base::Unretained(this)));
1167 }
1168 // Run only once, as there should have been one D-Bus call.
1169 message_loop_.Run();
1170
1171 // The observer should have received the discovering changed event exactly
1172 // once, the success callback should have been called 3 times and the adapter
1173 // should be discovering.
1174 EXPECT_EQ(1, observer.discovering_changed_count_);
1175 EXPECT_EQ(3, callback_count_);
1176 EXPECT_EQ(0, error_callback_count_);
1177 EXPECT_TRUE(observer.last_discovering_);
1178 EXPECT_TRUE(adapter_->IsDiscovering());
1179 ASSERT_EQ((size_t)3, discovery_sessions_.size());
1180
1181 for (int i = 0; i < 3; i++)
1182 EXPECT_TRUE(discovery_sessions_[i]->IsActive());
1183
1184 // Stop the timers that the simulation uses
1185 fake_bluetooth_device_client_->EndDiscoverySimulation(
1186 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
1187
1188 ASSERT_TRUE(adapter_->IsPowered());
1189 ASSERT_TRUE(adapter_->IsDiscovering());
1190
1191 // Delete all but one discovery session.
1192 discovery_sessions_.pop_back();
1193 discovery_sessions_.pop_back();
1194 ASSERT_EQ((size_t)1, discovery_sessions_.size());
1195 EXPECT_TRUE(discovery_sessions_[0]->IsActive());
1196 EXPECT_TRUE(adapter_->IsDiscovering());
1197
1198 // Stop device discovery behind the adapter. The one active discovery session
1199 // should become inactive, but more importantly, we shouldn't run into any
1200 // memory errors as the sessions that we explicitly deleted should get
1201 // cleaned up.
1202 fake_bluetooth_adapter_client_->StopDiscovery(
1203 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath),
1204 base::Bind(&BluetoothChromeOSTest::Callback,
1205 base::Unretained(this)),
1206 base::Bind(&BluetoothChromeOSTest::DBusErrorCallback,
1207 base::Unretained(this)));
1208 message_loop_.Run();
1209 EXPECT_EQ(2, observer.discovering_changed_count_);
1210 EXPECT_EQ(4, callback_count_);
1211 EXPECT_EQ(0, error_callback_count_);
1212 EXPECT_FALSE(observer.last_discovering_);
1213 EXPECT_FALSE(adapter_->IsDiscovering());
1214 EXPECT_FALSE(discovery_sessions_[0]->IsActive());
1158 } 1215 }
1159 1216
1160 TEST_F(BluetoothChromeOSTest, QueuedDiscoveryRequests) { 1217 TEST_F(BluetoothChromeOSTest, QueuedDiscoveryRequests) {
1161 GetAdapter(); 1218 GetAdapter();
1162 1219
1163 adapter_->SetPowered( 1220 adapter_->SetPowered(
1164 true, 1221 true,
1165 base::Bind(&BluetoothChromeOSTest::Callback, 1222 base::Bind(&BluetoothChromeOSTest::Callback,
1166 base::Unretained(this)), 1223 base::Unretained(this)),
1167 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1224 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1168 base::Unretained(this))); 1225 base::Unretained(this)));
1169 EXPECT_EQ(1, callback_count_); 1226 EXPECT_EQ(1, callback_count_);
1170 EXPECT_EQ(0, error_callback_count_); 1227 EXPECT_EQ(0, error_callback_count_);
1171 EXPECT_TRUE(adapter_->IsPowered()); 1228 EXPECT_TRUE(adapter_->IsPowered());
1172 callback_count_ = 0; 1229 callback_count_ = 0;
1173 1230
1174 TestObserver observer(adapter_); 1231 TestObserver observer(adapter_);
1175 adapter_->AddObserver(&observer); 1232 adapter_->AddObserver(&observer);
1176 1233
1177 EXPECT_EQ(0, observer.discovering_changed_count_); 1234 EXPECT_EQ(0, observer.discovering_changed_count_);
1178 EXPECT_FALSE(observer.last_discovering_); 1235 EXPECT_FALSE(observer.last_discovering_);
1179 EXPECT_FALSE(adapter_->IsDiscovering()); 1236 EXPECT_FALSE(adapter_->IsDiscovering());
1180 1237
1181 // Request to start discovery. The call should be pending. 1238 // Request to start discovery. The call should be pending.
1182 adapter_->StartDiscovering( 1239 adapter_->StartDiscoverySession(
1183 base::Bind(&BluetoothChromeOSTest::Callback, 1240 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1184 base::Unretained(this)), 1241 base::Unretained(this)),
1185 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1242 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1186 base::Unretained(this))); 1243 base::Unretained(this)));
1187 EXPECT_EQ(0, callback_count_); 1244 EXPECT_EQ(0, callback_count_);
1188 1245
1189 fake_bluetooth_device_client_->EndDiscoverySimulation( 1246 fake_bluetooth_device_client_->EndDiscoverySimulation(
1190 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath)); 1247 dbus::ObjectPath(FakeBluetoothAdapterClient::kAdapterPath));
1191 1248
1192 // The underlying adapter has started discovery, but our call hasn't returned 1249 // The underlying adapter has started discovery, but our call hasn't returned
1193 // yet. 1250 // yet.
1194 EXPECT_EQ(1, observer.discovering_changed_count_); 1251 EXPECT_EQ(1, observer.discovering_changed_count_);
1195 EXPECT_TRUE(observer.last_discovering_); 1252 EXPECT_TRUE(observer.last_discovering_);
1196 EXPECT_TRUE(adapter_->IsDiscovering()); 1253 EXPECT_TRUE(adapter_->IsDiscovering());
1197 1254 EXPECT_TRUE(discovery_sessions_.empty());
1198 // Try to stop discovery. This should fail while there is a call pending.
1199 adapter_->StopDiscovering(
1200 base::Bind(&BluetoothChromeOSTest::Callback,
1201 base::Unretained(this)),
1202 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1203 base::Unretained(this)));
1204 EXPECT_EQ(0, callback_count_);
1205 EXPECT_EQ(1, error_callback_count_);
1206 EXPECT_EQ(1, observer.discovering_changed_count_);
1207 EXPECT_TRUE(observer.last_discovering_);
1208 EXPECT_TRUE(adapter_->IsDiscovering());
1209 1255
1210 // Request to start discovery twice. These should get queued and there should 1256 // Request to start discovery twice. These should get queued and there should
1211 // be no change in state. 1257 // be no change in state.
1212 for (int i = 0; i < 2; i++) { 1258 for (int i = 0; i < 2; i++) {
1213 adapter_->StartDiscovering( 1259 adapter_->StartDiscoverySession(
1214 base::Bind(&BluetoothChromeOSTest::Callback, 1260 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1215 base::Unretained(this)), 1261 base::Unretained(this)),
1216 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1262 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1217 base::Unretained(this))); 1263 base::Unretained(this)));
1218 } 1264 }
1219 EXPECT_EQ(0, callback_count_); 1265 EXPECT_EQ(0, callback_count_);
1220 EXPECT_EQ(1, error_callback_count_); 1266 EXPECT_EQ(0, error_callback_count_);
1221 EXPECT_EQ(1, observer.discovering_changed_count_); 1267 EXPECT_EQ(1, observer.discovering_changed_count_);
1222 EXPECT_TRUE(observer.last_discovering_); 1268 EXPECT_TRUE(observer.last_discovering_);
1223 EXPECT_TRUE(adapter_->IsDiscovering()); 1269 EXPECT_TRUE(adapter_->IsDiscovering());
1270 EXPECT_TRUE(discovery_sessions_.empty());
1224 1271
1225 // Process the pending call. The queued calls should execute and the discovery 1272 // Process the pending call. The queued calls should execute and the discovery
1226 // session reference count should increase. 1273 // session reference count should increase.
1227 message_loop_.Run(); 1274 message_loop_.Run();
1228 EXPECT_EQ(3, callback_count_); 1275 EXPECT_EQ(3, callback_count_);
1229 EXPECT_EQ(1, error_callback_count_); 1276 EXPECT_EQ(0, error_callback_count_);
1230 EXPECT_EQ(1, observer.discovering_changed_count_); 1277 EXPECT_EQ(1, observer.discovering_changed_count_);
1231 EXPECT_TRUE(observer.last_discovering_); 1278 EXPECT_TRUE(observer.last_discovering_);
1232 EXPECT_TRUE(adapter_->IsDiscovering()); 1279 EXPECT_TRUE(adapter_->IsDiscovering());
1280 ASSERT_EQ((size_t)3, discovery_sessions_.size());
1233 1281
1234 // Verify the reference count by removing sessions 3 times. The last request 1282 // Verify the reference count by removing sessions 3 times. The last request
1235 // should remain pending. 1283 // should remain pending.
1236 for (int i = 0; i < 3; i++) { 1284 for (int i = 0; i < 3; i++) {
1237 adapter_->StopDiscovering( 1285 discovery_sessions_[i]->Stop(
1238 base::Bind(&BluetoothChromeOSTest::Callback, 1286 base::Bind(&BluetoothChromeOSTest::Callback,
1239 base::Unretained(this)), 1287 base::Unretained(this)),
1240 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1288 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1241 base::Unretained(this))); 1289 base::Unretained(this)));
1242 } 1290 }
1243 EXPECT_EQ(5, callback_count_); 1291 EXPECT_EQ(5, callback_count_);
1244 EXPECT_EQ(1, error_callback_count_); 1292 EXPECT_EQ(0, error_callback_count_);
1245 EXPECT_EQ(2, observer.discovering_changed_count_); 1293 EXPECT_EQ(2, observer.discovering_changed_count_);
1246 EXPECT_FALSE(observer.last_discovering_); 1294 EXPECT_FALSE(observer.last_discovering_);
1247 EXPECT_FALSE(adapter_->IsDiscovering()); 1295 EXPECT_FALSE(adapter_->IsDiscovering());
1296 EXPECT_FALSE(discovery_sessions_[0]->IsActive());
1297 EXPECT_FALSE(discovery_sessions_[1]->IsActive());
1298 EXPECT_TRUE(discovery_sessions_[2]->IsActive());
1248 1299
1249 // Request to stop should fail. 1300 // Request to stop the session whose call is pending should fail.
1250 adapter_->StopDiscovering( 1301 discovery_sessions_[2]->Stop(
1251 base::Bind(&BluetoothChromeOSTest::Callback, 1302 base::Bind(&BluetoothChromeOSTest::Callback,
1252 base::Unretained(this)), 1303 base::Unretained(this)),
1253 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1304 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1254 base::Unretained(this))); 1305 base::Unretained(this)));
1255 EXPECT_EQ(5, callback_count_); 1306 EXPECT_EQ(5, callback_count_);
1256 EXPECT_EQ(2, error_callback_count_); 1307 EXPECT_EQ(1, error_callback_count_);
1257 EXPECT_EQ(2, observer.discovering_changed_count_); 1308 EXPECT_EQ(2, observer.discovering_changed_count_);
1258 EXPECT_FALSE(observer.last_discovering_); 1309 EXPECT_FALSE(observer.last_discovering_);
1259 EXPECT_FALSE(adapter_->IsDiscovering()); 1310 EXPECT_FALSE(adapter_->IsDiscovering());
1311 EXPECT_TRUE(discovery_sessions_[2]->IsActive());
1260 1312
1261 // Request to start should get queued. 1313 // Request to start should get queued.
1262 adapter_->StartDiscovering( 1314 adapter_->StartDiscoverySession(
1263 base::Bind(&BluetoothChromeOSTest::Callback, 1315 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1264 base::Unretained(this)), 1316 base::Unretained(this)),
1265 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1317 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1266 base::Unretained(this))); 1318 base::Unretained(this)));
1267 EXPECT_EQ(5, callback_count_); 1319 EXPECT_EQ(5, callback_count_);
1268 EXPECT_EQ(2, error_callback_count_); 1320 EXPECT_EQ(1, error_callback_count_);
1269 EXPECT_EQ(2, observer.discovering_changed_count_); 1321 EXPECT_EQ(2, observer.discovering_changed_count_);
1270 EXPECT_FALSE(observer.last_discovering_); 1322 EXPECT_FALSE(observer.last_discovering_);
1271 EXPECT_FALSE(adapter_->IsDiscovering()); 1323 EXPECT_FALSE(adapter_->IsDiscovering());
1324 ASSERT_EQ((size_t)3, discovery_sessions_.size());
1272 1325
1273 // Run the pending request. 1326 // Run the pending request.
1274 message_loop_.Run(); 1327 message_loop_.Run();
1275 EXPECT_EQ(6, callback_count_); 1328 EXPECT_EQ(6, callback_count_);
1276 EXPECT_EQ(2, error_callback_count_); 1329 EXPECT_EQ(1, error_callback_count_);
1277 EXPECT_EQ(3, observer.discovering_changed_count_); 1330 EXPECT_EQ(3, observer.discovering_changed_count_);
1278 EXPECT_TRUE(observer.last_discovering_); 1331 EXPECT_TRUE(observer.last_discovering_);
1279 EXPECT_TRUE(adapter_->IsDiscovering()); 1332 EXPECT_TRUE(adapter_->IsDiscovering());
1333 ASSERT_EQ((size_t)3, discovery_sessions_.size());
1334 EXPECT_FALSE(discovery_sessions_[2]->IsActive());
1280 1335
1281 // The queued request to start discovery should have been issued but is still 1336 // The queued request to start discovery should have been issued but is still
1282 // pending. Run the loop and verify. 1337 // pending. Run the loop and verify.
1283 message_loop_.Run(); 1338 message_loop_.Run();
1284 EXPECT_EQ(7, callback_count_); 1339 EXPECT_EQ(7, callback_count_);
1285 EXPECT_EQ(2, error_callback_count_); 1340 EXPECT_EQ(1, error_callback_count_);
1286 EXPECT_EQ(3, observer.discovering_changed_count_); 1341 EXPECT_EQ(3, observer.discovering_changed_count_);
1287 EXPECT_TRUE(observer.last_discovering_); 1342 EXPECT_TRUE(observer.last_discovering_);
1288 EXPECT_TRUE(adapter_->IsDiscovering()); 1343 EXPECT_TRUE(adapter_->IsDiscovering());
1344 ASSERT_EQ((size_t)4, discovery_sessions_.size());
1345 EXPECT_TRUE(discovery_sessions_[3]->IsActive());
1346
1347 adapter_->RemoveObserver(&observer);
1289 } 1348 }
1290 1349
1291 TEST_F(BluetoothChromeOSTest, StartDiscoverySession) { 1350 TEST_F(BluetoothChromeOSTest, StartDiscoverySession) {
1292 GetAdapter(); 1351 GetAdapter();
1293 1352
1294 adapter_->SetPowered( 1353 adapter_->SetPowered(
1295 true, 1354 true,
1296 base::Bind(&BluetoothChromeOSTest::Callback, 1355 base::Bind(&BluetoothChromeOSTest::Callback,
1297 base::Unretained(this)), 1356 base::Unretained(this)),
1298 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1357 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1299 base::Unretained(this))); 1358 base::Unretained(this)));
1300 EXPECT_EQ(1, callback_count_); 1359 EXPECT_EQ(1, callback_count_);
1301 EXPECT_EQ(0, error_callback_count_); 1360 EXPECT_EQ(0, error_callback_count_);
1302 EXPECT_TRUE(adapter_->IsPowered()); 1361 EXPECT_TRUE(adapter_->IsPowered());
1303 callback_count_ = 0; 1362 callback_count_ = 0;
1304 1363
1305 TestObserver observer(adapter_); 1364 TestObserver observer(adapter_);
1306 adapter_->AddObserver(&observer); 1365 adapter_->AddObserver(&observer);
1307 1366
1308 EXPECT_EQ(0, observer.discovering_changed_count_); 1367 EXPECT_EQ(0, observer.discovering_changed_count_);
1309 EXPECT_FALSE(observer.last_discovering_); 1368 EXPECT_FALSE(observer.last_discovering_);
1310 EXPECT_FALSE(adapter_->IsDiscovering()); 1369 EXPECT_FALSE(adapter_->IsDiscovering());
1311 EXPECT_FALSE(last_discovery_session_.get()); 1370 EXPECT_TRUE(discovery_sessions_.empty());
1312 1371
1313 // Request a new discovery session. 1372 // Request a new discovery session.
1314 adapter_->StartDiscoverySession( 1373 adapter_->StartDiscoverySession(
1315 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback, 1374 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1316 base::Unretained(this)), 1375 base::Unretained(this)),
1317 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1376 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1318 base::Unretained(this))); 1377 base::Unretained(this)));
1319 message_loop_.Run(); 1378 message_loop_.Run();
1320 EXPECT_EQ(1, observer.discovering_changed_count_); 1379 EXPECT_EQ(1, observer.discovering_changed_count_);
1321 EXPECT_EQ(1, callback_count_); 1380 EXPECT_EQ(1, callback_count_);
1322 EXPECT_EQ(0, error_callback_count_); 1381 EXPECT_EQ(0, error_callback_count_);
1323 EXPECT_TRUE(observer.last_discovering_); 1382 EXPECT_TRUE(observer.last_discovering_);
1324 EXPECT_TRUE(adapter_->IsDiscovering()); 1383 EXPECT_TRUE(adapter_->IsDiscovering());
1325 EXPECT_TRUE(last_discovery_session_.get()); 1384 ASSERT_EQ((size_t)1, discovery_sessions_.size());
1326 EXPECT_TRUE(last_discovery_session_->IsActive()); 1385 EXPECT_TRUE(discovery_sessions_[0]->IsActive());
1327 1386
1328 // Start another session. A new one should be returned in the callback, which 1387 // Start another session. A new one should be returned in the callback, which
1329 // in turn will destroy the previous session. Adapter should still be 1388 // in turn will destroy the previous session. Adapter should still be
1330 // discovering and the reference count should be 1. 1389 // discovering and the reference count should be 1.
1331 adapter_->StartDiscoverySession( 1390 adapter_->StartDiscoverySession(
1332 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback, 1391 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1333 base::Unretained(this)), 1392 base::Unretained(this)),
1334 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1393 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1335 base::Unretained(this))); 1394 base::Unretained(this)));
1336 message_loop_.Run(); 1395 message_loop_.Run();
1337 EXPECT_EQ(1, observer.discovering_changed_count_); 1396 EXPECT_EQ(1, observer.discovering_changed_count_);
1338 EXPECT_EQ(2, callback_count_); 1397 EXPECT_EQ(2, callback_count_);
1339 EXPECT_EQ(0, error_callback_count_); 1398 EXPECT_EQ(0, error_callback_count_);
1340 EXPECT_TRUE(observer.last_discovering_); 1399 EXPECT_TRUE(observer.last_discovering_);
1341 EXPECT_TRUE(adapter_->IsDiscovering()); 1400 EXPECT_TRUE(adapter_->IsDiscovering());
1342 EXPECT_TRUE(last_discovery_session_.get()); 1401 ASSERT_EQ((size_t)2, discovery_sessions_.size());
1343 EXPECT_TRUE(last_discovery_session_->IsActive()); 1402 EXPECT_TRUE(discovery_sessions_[0]->IsActive());
1344
1345 // Hold on to the current discovery session to prevent it from getting
1346 // destroyed during the next call to StartDiscoverySession.
1347 scoped_ptr<BluetoothDiscoverySession> discovery_session =
1348 last_discovery_session_.Pass();
1349 1403
1350 // Request a new session. 1404 // Request a new session.
1351 adapter_->StartDiscoverySession( 1405 adapter_->StartDiscoverySession(
1352 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback, 1406 base::Bind(&BluetoothChromeOSTest::DiscoverySessionCallback,
1353 base::Unretained(this)), 1407 base::Unretained(this)),
1354 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1408 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1355 base::Unretained(this))); 1409 base::Unretained(this)));
1356 message_loop_.Run(); 1410 message_loop_.Run();
1357 EXPECT_EQ(1, observer.discovering_changed_count_); 1411 EXPECT_EQ(1, observer.discovering_changed_count_);
1358 EXPECT_EQ(3, callback_count_); 1412 EXPECT_EQ(3, callback_count_);
1359 EXPECT_EQ(0, error_callback_count_); 1413 EXPECT_EQ(0, error_callback_count_);
1360 EXPECT_TRUE(observer.last_discovering_); 1414 EXPECT_TRUE(observer.last_discovering_);
1361 EXPECT_TRUE(adapter_->IsDiscovering()); 1415 EXPECT_TRUE(adapter_->IsDiscovering());
1362 EXPECT_TRUE(last_discovery_session_.get()); 1416 ASSERT_EQ((size_t)3, discovery_sessions_.size());
1363 EXPECT_TRUE(last_discovery_session_->IsActive()); 1417 EXPECT_TRUE(discovery_sessions_[1]->IsActive());
1364 EXPECT_NE(last_discovery_session_.get(), discovery_session); 1418 EXPECT_NE(discovery_sessions_[0], discovery_sessions_[1]);
1365 1419
1366 // Stop the previous discovery session. The session should end but discovery 1420 // Stop the previous discovery session. The session should end but discovery
1367 // should continue. 1421 // should continue.
1368 discovery_session->Stop( 1422 discovery_sessions_[0]->Stop(
1369 base::Bind(&BluetoothChromeOSTest::Callback, 1423 base::Bind(&BluetoothChromeOSTest::Callback,
1370 base::Unretained(this)), 1424 base::Unretained(this)),
1371 base::Bind(&BluetoothChromeOSTest::ErrorCallback, 1425 base::Bind(&BluetoothChromeOSTest::ErrorCallback,
1372 base::Unretained(this))); 1426 base::Unretained(this)));
1373 message_loop_.Run(); 1427 message_loop_.Run();
1374 EXPECT_EQ(1, observer.discovering_changed_count_); 1428 EXPECT_EQ(1, observer.discovering_changed_count_);
1375 EXPECT_EQ(4, callback_count_); 1429 EXPECT_EQ(4, callback_count_);
1376 EXPECT_EQ(0, error_callback_count_); 1430 EXPECT_EQ(0, error_callback_count_);
1377 EXPECT_TRUE(observer.last_discovering_); 1431 EXPECT_TRUE(observer.last_discovering_);
1378 EXPECT_TRUE(adapter_->IsDiscovering()); 1432 EXPECT_TRUE(adapter_->IsDiscovering());
1379 EXPECT_TRUE(last_discovery_session_.get()); 1433 ASSERT_EQ((size_t)3, discovery_sessions_.size());
1380 EXPECT_TRUE(last_discovery_session_->IsActive()); 1434 EXPECT_FALSE(discovery_sessions_[0]->IsActive());
1381 EXPECT_FALSE(discovery_session->IsActive()); 1435 EXPECT_TRUE(discovery_sessions_[1]->IsActive());
1382 1436
1383 // Delete the current active session. Discovery should eventually stop. 1437 // Delete the current active session. Discovery should eventually stop.
1384 last_discovery_session_.reset(); 1438 discovery_sessions_.clear();
1385 while (observer.last_discovering_) { 1439 while (observer.last_discovering_)
1386 message_loop_.RunUntilIdle(); 1440 message_loop_.RunUntilIdle();
1387 } 1441
1388 EXPECT_EQ(2, observer.discovering_changed_count_); 1442 EXPECT_EQ(2, observer.discovering_changed_count_);
1389 EXPECT_EQ(4, callback_count_); 1443 EXPECT_EQ(4, callback_count_);
1390 EXPECT_EQ(0, error_callback_count_); 1444 EXPECT_EQ(0, error_callback_count_);
1391 EXPECT_FALSE(observer.last_discovering_); 1445 EXPECT_FALSE(observer.last_discovering_);
1392 EXPECT_FALSE(adapter_->IsDiscovering()); 1446 EXPECT_FALSE(adapter_->IsDiscovering());
1393 EXPECT_FALSE(last_discovery_session_.get());
1394 1447
1395 adapter_->RemoveObserver(&observer); 1448 adapter_->RemoveObserver(&observer);
1396 } 1449 }
1397 1450
1398 TEST_F(BluetoothChromeOSTest, DeviceProperties) { 1451 TEST_F(BluetoothChromeOSTest, DeviceProperties) {
1399 GetAdapter(); 1452 GetAdapter();
1400 1453
1401 BluetoothAdapter::DeviceList devices = adapter_->GetDevices(); 1454 BluetoothAdapter::DeviceList devices = adapter_->GetDevices();
1402 ASSERT_EQ(1U, devices.size()); 1455 ASSERT_EQ(1U, devices.size());
1403 ASSERT_EQ(FakeBluetoothDeviceClient::kPairedDeviceAddress, 1456 ASSERT_EQ(FakeBluetoothDeviceClient::kPairedDeviceAddress,
(...skipping 1732 matching lines...) Expand 10 before | Expand all | Expand 10 after
3136 3189
3137 // Unknown vendor specification identifier. 3190 // Unknown vendor specification identifier.
3138 properties->modalias.ReplaceValue("chrome:v00E0p2400d0400"); 3191 properties->modalias.ReplaceValue("chrome:v00E0p2400d0400");
3139 3192
3140 EXPECT_EQ(0, device->GetVendorID()); 3193 EXPECT_EQ(0, device->GetVendorID());
3141 EXPECT_EQ(0, device->GetProductID()); 3194 EXPECT_EQ(0, device->GetProductID());
3142 EXPECT_EQ(0, device->GetDeviceID()); 3195 EXPECT_EQ(0, device->GetDeviceID());
3143 } 3196 }
3144 3197
3145 } // namespace chromeos 3198 } // namespace chromeos
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_adapter_win_unittest.cc ('k') | device/bluetooth/bluetooth_discovery_session.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698