OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 | 7 |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 1398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1409 base::Unretained(this))); | 1409 base::Unretained(this))); |
1410 characteristic->StartNotifySession( | 1410 characteristic->StartNotifySession( |
1411 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, | 1411 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, |
1412 base::Unretained(this)), | 1412 base::Unretained(this)), |
1413 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 1413 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
1414 base::Unretained(this))); | 1414 base::Unretained(this))); |
1415 EXPECT_EQ(0, success_callback_count_); | 1415 EXPECT_EQ(0, success_callback_count_); |
1416 EXPECT_EQ(0, error_callback_count_); | 1416 EXPECT_EQ(0, error_callback_count_); |
1417 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1417 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1418 EXPECT_TRUE(update_sessions_.empty()); | 1418 EXPECT_TRUE(update_sessions_.empty()); |
1419 EXPECT_TRUE(characteristic->IsNotifying()); | 1419 EXPECT_FALSE(characteristic->IsNotifying()); |
1420 | 1420 |
1421 // Run the main loop. The initial call should complete. The queued call should | 1421 // Run the main loop. The initial call should complete. The queued call should |
1422 // succeed immediately. | 1422 // succeed immediately. |
1423 base::RunLoop().Run(); | 1423 base::RunLoop().Run(); |
1424 | 1424 |
| 1425 EXPECT_TRUE(characteristic->IsNotifying()); |
1425 EXPECT_EQ(3, success_callback_count_); | 1426 EXPECT_EQ(3, success_callback_count_); |
1426 EXPECT_EQ(0, error_callback_count_); | 1427 EXPECT_EQ(0, error_callback_count_); |
1427 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1428 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1428 EXPECT_EQ(3U, update_sessions_.size()); | 1429 EXPECT_EQ(3U, update_sessions_.size()); |
1429 | 1430 |
1430 // Notifications should be getting sent regularly now. | 1431 // Notifications should be getting sent regularly now. |
1431 base::RunLoop().Run(); | 1432 base::RunLoop().Run(); |
1432 EXPECT_GT(observer.gatt_characteristic_value_changed_count(), 1); | 1433 EXPECT_GT(observer.gatt_characteristic_value_changed_count(), 1); |
1433 | 1434 |
1434 // Stop one of the sessions. The session should become inactive but the | 1435 // Stop one of the sessions. The session should become inactive but the |
1435 // characteristic should still be notifying. | 1436 // characteristic should still be notifying. |
1436 BluetoothGattNotifySession* session = update_sessions_[0]; | 1437 BluetoothGattNotifySession* session = update_sessions_[0]; |
1437 EXPECT_TRUE(session->IsActive()); | 1438 EXPECT_TRUE(session->IsActive()); |
1438 session->Stop(base::Bind(&BluetoothGattBlueZTest::SuccessCallback, | 1439 session->Stop(base::Bind(&BluetoothGattBlueZTest::SuccessCallback, |
1439 base::Unretained(this))); | 1440 base::Unretained(this))); |
| 1441 |
| 1442 // Run message loop to stop the notify session. |
| 1443 base::RunLoop().Run(); |
| 1444 |
1440 EXPECT_EQ(4, success_callback_count_); | 1445 EXPECT_EQ(4, success_callback_count_); |
1441 EXPECT_EQ(0, error_callback_count_); | 1446 EXPECT_EQ(0, error_callback_count_); |
1442 EXPECT_FALSE(session->IsActive()); | 1447 EXPECT_FALSE(session->IsActive()); |
1443 EXPECT_EQ(characteristic->GetIdentifier(), | 1448 EXPECT_EQ(characteristic->GetIdentifier(), |
1444 session->GetCharacteristicIdentifier()); | 1449 session->GetCharacteristicIdentifier()); |
1445 EXPECT_TRUE(characteristic->IsNotifying()); | 1450 EXPECT_TRUE(characteristic->IsNotifying()); |
1446 | 1451 |
1447 // Delete another session. Characteristic should still be notifying. | 1452 // Delete another session. Characteristic should still be notifying. |
1448 update_sessions_.pop_back(); | 1453 update_sessions_.pop_back(); |
1449 EXPECT_EQ(2U, update_sessions_.size()); | 1454 EXPECT_EQ(2U, update_sessions_.size()); |
1450 EXPECT_TRUE(characteristic->IsNotifying()); | 1455 EXPECT_TRUE(characteristic->IsNotifying()); |
1451 EXPECT_FALSE(update_sessions_[0]->IsActive()); | 1456 EXPECT_FALSE(update_sessions_[0]->IsActive()); |
1452 EXPECT_TRUE(update_sessions_[1]->IsActive()); | 1457 EXPECT_TRUE(update_sessions_[1]->IsActive()); |
1453 | 1458 |
1454 // Clear the last session. | 1459 // Clear the last session. |
1455 update_sessions_.clear(); | 1460 update_sessions_.clear(); |
1456 EXPECT_TRUE(update_sessions_.empty()); | 1461 EXPECT_TRUE(update_sessions_.empty()); |
| 1462 |
| 1463 // Run message loop in order to do proper cleanup of sessions. |
| 1464 base::RunLoop().RunUntilIdle(); |
| 1465 |
1457 EXPECT_FALSE(characteristic->IsNotifying()); | 1466 EXPECT_FALSE(characteristic->IsNotifying()); |
1458 | 1467 |
1459 success_callback_count_ = 0; | 1468 success_callback_count_ = 0; |
1460 observer.Reset(); | 1469 observer.Reset(); |
1461 | 1470 |
1462 // Enable notifications again. | 1471 // Enable notifications again. |
1463 characteristic->StartNotifySession( | 1472 characteristic->StartNotifySession( |
1464 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, | 1473 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, |
1465 base::Unretained(this)), | 1474 base::Unretained(this)), |
1466 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 1475 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
1467 base::Unretained(this))); | 1476 base::Unretained(this))); |
1468 EXPECT_EQ(0, success_callback_count_); | 1477 EXPECT_EQ(0, success_callback_count_); |
1469 EXPECT_EQ(0, error_callback_count_); | 1478 EXPECT_EQ(0, error_callback_count_); |
1470 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1479 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1471 EXPECT_TRUE(update_sessions_.empty()); | 1480 EXPECT_TRUE(update_sessions_.empty()); |
1472 EXPECT_TRUE(characteristic->IsNotifying()); | 1481 EXPECT_FALSE(characteristic->IsNotifying()); |
1473 | 1482 |
1474 // Run the message loop. Notifications should begin. | 1483 // Run the message loop. Notifications should begin. |
1475 base::RunLoop().Run(); | 1484 base::RunLoop().Run(); |
1476 | 1485 |
1477 EXPECT_EQ(1, success_callback_count_); | 1486 EXPECT_EQ(1, success_callback_count_); |
1478 EXPECT_EQ(0, error_callback_count_); | 1487 EXPECT_EQ(0, error_callback_count_); |
1479 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1488 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1480 EXPECT_EQ(1U, update_sessions_.size()); | 1489 EXPECT_EQ(1U, update_sessions_.size()); |
1481 EXPECT_TRUE(update_sessions_[0]->IsActive()); | 1490 EXPECT_TRUE(update_sessions_[0]->IsActive()); |
1482 EXPECT_TRUE(characteristic->IsNotifying()); | 1491 EXPECT_TRUE(characteristic->IsNotifying()); |
1483 | 1492 |
1484 // Check that notifications are happening. | 1493 // Check that notifications are happening. |
1485 base::RunLoop().Run(); | 1494 base::RunLoop().Run(); |
1486 EXPECT_GT(observer.gatt_characteristic_value_changed_count(), 1); | 1495 EXPECT_GT(observer.gatt_characteristic_value_changed_count(), 1); |
1487 | 1496 |
1488 // Request another session. This should return immediately. | 1497 // Request another session. This should return immediately. |
1489 characteristic->StartNotifySession( | 1498 characteristic->StartNotifySession( |
1490 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, | 1499 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, |
1491 base::Unretained(this)), | 1500 base::Unretained(this)), |
1492 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 1501 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
1493 base::Unretained(this))); | 1502 base::Unretained(this))); |
| 1503 |
| 1504 // Run message loop to stop the notify session. |
| 1505 base::RunLoop().Run(); |
| 1506 |
1494 EXPECT_EQ(2, success_callback_count_); | 1507 EXPECT_EQ(2, success_callback_count_); |
1495 EXPECT_EQ(0, error_callback_count_); | 1508 EXPECT_EQ(0, error_callback_count_); |
1496 EXPECT_EQ(2U, update_sessions_.size()); | 1509 EXPECT_EQ(2U, update_sessions_.size()); |
1497 EXPECT_TRUE(update_sessions_[0]->IsActive()); | 1510 EXPECT_TRUE(update_sessions_[0]->IsActive()); |
1498 EXPECT_TRUE(update_sessions_[1]->IsActive()); | 1511 EXPECT_TRUE(update_sessions_[1]->IsActive()); |
1499 EXPECT_TRUE(characteristic->IsNotifying()); | 1512 EXPECT_TRUE(characteristic->IsNotifying()); |
1500 | 1513 |
1501 // Hide the characteristic. The sessions should become inactive. | 1514 // Hide the characteristic. The sessions should become inactive. |
1502 fake_bluetooth_gatt_characteristic_client_->HideHeartRateCharacteristics(); | 1515 fake_bluetooth_gatt_characteristic_client_->HideHeartRateCharacteristics(); |
1503 EXPECT_EQ(2U, update_sessions_.size()); | 1516 EXPECT_EQ(2U, update_sessions_.size()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1557 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, | 1570 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, |
1558 base::Unretained(this)), | 1571 base::Unretained(this)), |
1559 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 1572 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
1560 base::Unretained(this))); | 1573 base::Unretained(this))); |
1561 | 1574 |
1562 // The operation still hasn't completed but we should have received the first | 1575 // The operation still hasn't completed but we should have received the first |
1563 // notification. | 1576 // notification. |
1564 EXPECT_EQ(0, success_callback_count_); | 1577 EXPECT_EQ(0, success_callback_count_); |
1565 EXPECT_EQ(0, error_callback_count_); | 1578 EXPECT_EQ(0, error_callback_count_); |
1566 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1579 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1567 EXPECT_TRUE(characteristic->IsNotifying()); | 1580 EXPECT_FALSE(characteristic->IsNotifying()); |
1568 EXPECT_TRUE(update_sessions_.empty()); | 1581 EXPECT_TRUE(update_sessions_.empty()); |
1569 | 1582 |
1570 // Run the main loop. The initial call should complete. The queued calls | 1583 // Run the main loop. The initial call should complete. The queued calls |
1571 // should succeed immediately. | 1584 // should succeed immediately. |
1572 base::RunLoop().Run(); | 1585 base::RunLoop().Run(); |
1573 | 1586 |
1574 EXPECT_EQ(4, success_callback_count_); | 1587 EXPECT_EQ(4, success_callback_count_); |
1575 EXPECT_EQ(0, error_callback_count_); | 1588 EXPECT_EQ(0, error_callback_count_); |
1576 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1589 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1577 EXPECT_TRUE(characteristic->IsNotifying()); | 1590 EXPECT_TRUE(characteristic->IsNotifying()); |
1578 EXPECT_EQ(4U, update_sessions_.size()); | 1591 EXPECT_EQ(4U, update_sessions_.size()); |
1579 | 1592 |
1580 for (int i = 0; i < 4; i++) | 1593 for (int i = 0; i < 4; i++) |
1581 EXPECT_TRUE(update_sessions_[0]->IsActive()); | 1594 EXPECT_TRUE(update_sessions_[0]->IsActive()); |
1582 | 1595 |
1583 // Stop notifications directly through the client. The sessions should get | 1596 // Stop notifications directly through the client. The sessions should get |
1584 // marked as inactive. | 1597 // marked as inactive. |
1585 fake_bluetooth_gatt_characteristic_client_->StopNotify( | 1598 fake_bluetooth_gatt_characteristic_client_->StopNotify( |
1586 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath(), | 1599 fake_bluetooth_gatt_characteristic_client_->GetHeartRateMeasurementPath(), |
1587 base::Bind(&BluetoothGattBlueZTest::SuccessCallback, | 1600 base::Bind(&BluetoothGattBlueZTest::SuccessCallback, |
1588 base::Unretained(this)), | 1601 base::Unretained(this)), |
1589 base::Bind(&BluetoothGattBlueZTest::DBusErrorCallback, | 1602 base::Bind(&BluetoothGattBlueZTest::DBusErrorCallback, |
1590 base::Unretained(this))); | 1603 base::Unretained(this))); |
1591 EXPECT_EQ(5, success_callback_count_); | 1604 EXPECT_EQ(5, success_callback_count_); |
1592 EXPECT_EQ(0, error_callback_count_); | 1605 EXPECT_EQ(0, error_callback_count_); |
| 1606 |
| 1607 // Run message loop to stop the notify session. |
| 1608 base::RunLoop().RunUntilIdle(); |
| 1609 |
1593 EXPECT_FALSE(characteristic->IsNotifying()); | 1610 EXPECT_FALSE(characteristic->IsNotifying()); |
1594 EXPECT_EQ(4U, update_sessions_.size()); | 1611 EXPECT_EQ(4U, update_sessions_.size()); |
1595 | 1612 |
1596 for (int i = 0; i < 4; i++) | 1613 for (int i = 0; i < 4; i++) |
1597 EXPECT_FALSE(update_sessions_[0]->IsActive()); | 1614 EXPECT_FALSE(update_sessions_[0]->IsActive()); |
1598 | 1615 |
1599 // It should be possible to restart notifications and the call should reset | 1616 // It should be possible to restart notifications and the call should reset |
1600 // the session count and make a request through the client. | 1617 // the session count and make a request through the client. |
1601 update_sessions_.clear(); | 1618 update_sessions_.clear(); |
1602 success_callback_count_ = 0; | 1619 success_callback_count_ = 0; |
1603 observer.Reset(); | 1620 observer.Reset(); |
1604 characteristic->StartNotifySession( | 1621 characteristic->StartNotifySession( |
1605 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, | 1622 base::Bind(&BluetoothGattBlueZTest::NotifySessionCallback, |
1606 base::Unretained(this)), | 1623 base::Unretained(this)), |
1607 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, | 1624 base::Bind(&BluetoothGattBlueZTest::ServiceErrorCallback, |
1608 base::Unretained(this))); | 1625 base::Unretained(this))); |
1609 | 1626 |
| 1627 // Run message loop to start the notify session. |
| 1628 base::RunLoop().RunUntilIdle(); |
| 1629 |
1610 EXPECT_EQ(0, success_callback_count_); | 1630 EXPECT_EQ(0, success_callback_count_); |
1611 EXPECT_EQ(0, error_callback_count_); | 1631 EXPECT_EQ(0, error_callback_count_); |
1612 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1632 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1613 EXPECT_TRUE(characteristic->IsNotifying()); | 1633 EXPECT_FALSE(characteristic->IsNotifying()); |
1614 EXPECT_TRUE(update_sessions_.empty()); | 1634 EXPECT_TRUE(update_sessions_.empty()); |
1615 | 1635 |
1616 base::RunLoop().Run(); | 1636 base::RunLoop().Run(); |
1617 | 1637 |
1618 EXPECT_EQ(1, success_callback_count_); | 1638 EXPECT_EQ(1, success_callback_count_); |
1619 EXPECT_EQ(0, error_callback_count_); | 1639 EXPECT_EQ(0, error_callback_count_); |
1620 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); | 1640 EXPECT_EQ(1, observer.gatt_characteristic_value_changed_count()); |
1621 EXPECT_TRUE(characteristic->IsNotifying()); | 1641 EXPECT_TRUE(characteristic->IsNotifying()); |
1622 EXPECT_EQ(1U, update_sessions_.size()); | 1642 EXPECT_EQ(1U, update_sessions_.size()); |
1623 EXPECT_TRUE(update_sessions_[0]->IsActive()); | 1643 EXPECT_TRUE(update_sessions_[0]->IsActive()); |
1624 } | 1644 } |
1625 | 1645 |
1626 } // namespace bluez | 1646 } // namespace bluez |
OLD | NEW |