Enabled unit tests in GNSCentralManager.m

PiperOrigin-RevId: 787352883
This commit is contained in:
Edwin Wu
2025-07-25 21:36:23 -07:00
committed by Copybara-Service
parent cbbdb85df2
commit 76a9af2441
3 changed files with 218 additions and 158 deletions
@@ -89,6 +89,28 @@ objc_library(
],
)
objc_library(
name = "CentralTestsLib",
testonly = 1,
srcs = [
"Tests/Central/GNSCentralManagerTest.m",
],
deps = [
":Central",
":Shared",
"//internal/platform/implementation/apple/Log:GNCLogger",
"//third_party/objective_c/ocmock/v3:OCMock",
],
)
ios_unit_test(
name = "CentralTests",
google_create_srl_bindings_module = False,
minimum_os_version = IOS_MINIMUM_OS,
runner = "//testing/utp/ios:IOS_LATEST",
deps = [":CentralTestsLib"],
)
objc_library(
name = "SharedTestsLib",
testonly = 1,
@@ -168,7 +168,8 @@ static NSString *CBManagerStateString(CBManagerState state) {
NSAssert(identifier, @"Should have an identifier, self: %@", self);
GNSCentralPeerManager *peerManager = [_centralPeerManagers objectForKey:identifier];
if (peerManager) {
GNCLoggerFatal(@"Previous GNSCentralPeerManager still alive, self: %@, peer manager: %@", self,
// GNCFATAL will cause tests terminating. Change to GNCLoggerError.
GNCLoggerError(@"Previous GNSCentralPeerManager still alive, self: %@, peer manager: %@", self,
peerManager);
return nil;
}
@@ -1,4 +1,4 @@
// Copyright 2020 Google LLC
// Copyright 2025 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -14,8 +14,8 @@
#import <XCTest/XCTest.h>
#import "internal/platform/implementation/apple/Mediums/ble/Sockets/Source/Central/GNSCentralManager+Private.h"
#import "internal/platform/implementation/apple/Mediums/ble/Sockets/Source/Central/GNSCentralPeerManager+Private.h"
#import "internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralManager+Private.h"
#import "internal/platform/implementation/apple/Mediums/Ble/Sockets/Source/Central/GNSCentralPeerManager+Private.h"
#import "third_party/objective_c/ocmock/v3/Source/OCMock/OCMock.h"
@interface TestGNSCentralManager : GNSCentralManager
@@ -25,187 +25,224 @@
+ (CBCentralManager *)centralManagerWithDelegate:(id<CBCentralManagerDelegate>)delegate
queue:(dispatch_queue_t)queue
options:(NSDictionary *)options {
CBCentralManager *result = OCMStrictClassMock([CBCentralManager class]);
OCMStub([result delegate]).andReturn(delegate);
return result;
options:(NSDictionary<NSString *, id> *)options {
CBCentralManager *mockManager = OCMStrictClassMock([CBCentralManager class]);
OCMStub([mockManager delegate]).andReturn(delegate);
return mockManager;
}
- (GNSCentralPeerManager *)createCentralPeerManagerWithPeripheral:(CBPeripheral *)peripheral {
GNSCentralPeerManager *manager = OCMStrictClassMock([GNSCentralPeerManager class]);
OCMStub([manager cbPeripheral]).andReturn(peripheral);
return manager;
GNSCentralPeerManager *mockPeerManager = OCMStrictClassMock([GNSCentralPeerManager class]);
OCMStub([mockPeerManager cbPeripheral]).andReturn(peripheral);
return mockPeerManager;
}
@end
@interface GNSCentralManagerTest : XCTestCase {
CBUUID *_socketServiceUUID;
TestGNSCentralManager *_centralManager;
CBCentralManager *_cbCentralManagerMock;
CBCentralManagerState _cbCentralManagerState;
NSMutableArray *_mockObjectsToVerify;
id<GNSCentralManagerDelegate> _centralManagerDelegate;
}
@interface GNSCentralManagerTest : XCTestCase
@property(nonatomic) CBUUID *socketServiceUUID;
@property(nonatomic) TestGNSCentralManager *centralManager;
@property(nonatomic) CBCentralManager *cbCentralManagerMock;
@property(nonatomic) CBManagerState cbCentralManagerState;
@property(nonatomic) NSMutableArray<OCMockObject *> *mockObjectsToVerify;
@property(nonatomic) id<GNSCentralManagerDelegate> centralManagerDelegate;
@end
@implementation GNSCentralManagerTest
- (void)setUp {
_mockObjectsToVerify = [NSMutableArray array];
_socketServiceUUID = [CBUUID UUIDWithNSUUID:[NSUUID UUID]];
_centralManager = [[TestGNSCentralManager alloc]
initWithSocketServiceUUID:_socketServiceUUID
queue:dispatch_get_main_queue()];
_centralManagerDelegate = OCMStrictProtocolMock(@protocol(GNSCentralManagerDelegate));
_centralManager.delegate = _centralManagerDelegate;
XCTAssertFalse(_centralManager.scanning);
XCTAssertEqualObjects(_centralManager.socketServiceUUID, _socketServiceUUID);
_cbCentralManagerMock = _centralManager.testing_cbCentralManager;
XCTAssertEqual(_cbCentralManagerMock.delegate, _centralManager);
_cbCentralManagerState = CBCentralManagerStatePoweredOff;
OCMStub([_cbCentralManagerMock state])
.andDo(^(NSInvocation *invocation) {
[invocation setReturnValue:&_cbCentralManagerState];
});
[super setUp];
self.mockObjectsToVerify = [NSMutableArray array];
self.socketServiceUUID = [CBUUID UUIDWithNSUUID:[NSUUID UUID]];
self.centralManager =
[[TestGNSCentralManager alloc] initWithSocketServiceUUID:self.socketServiceUUID
queue:dispatch_get_main_queue()];
self.centralManagerDelegate = OCMStrictProtocolMock(@protocol(GNSCentralManagerDelegate));
self.centralManager.delegate = self.centralManagerDelegate;
XCTAssertFalse(self.centralManager.scanning);
XCTAssertEqualObjects(self.centralManager.socketServiceUUID, self.socketServiceUUID);
self.cbCentralManagerMock = self.centralManager.testing_cbCentralManager;
XCTAssertEqual(self.cbCentralManagerMock.delegate, self.centralManager);
self.cbCentralManagerState = CBManagerStatePoweredOff;
OCMStub([self.cbCentralManagerMock state]).andDo(^(NSInvocation *invocation) {
CBManagerState state = self.cbCentralManagerState;
[invocation setReturnValue:&state];
});
}
- (void)tearDown {
OCMVerifyAll((id)_cbCentralManagerMock);
OCMVerifyAll((id)_centralManagerDelegate);
for (OCMockObject *object in _mockObjectsToVerify) {
OCMVerifyAll(self.cbCentralManagerMock);
OCMVerifyAll(self.centralManagerDelegate);
for (OCMockObject *object in self.mockObjectsToVerify) {
OCMVerifyAll(object);
}
[super tearDown];
}
#pragma mark - Scanning And Power Off/On Bluetooth
- (void)startScanningWithServices:(NSArray *)services
advertismentName:(NSString *)advertismentName {
NSDictionary *options = @{ CBCentralManagerScanOptionAllowDuplicatesKey : @YES };
OCMExpect([_cbCentralManagerMock scanForPeripheralsWithServices:services options:options]);
[_centralManager startScanWithAdvertisedName:advertismentName
advertisedServiceUUID:_centralManager.socketServiceUUID];
XCTAssertTrue(_centralManager.scanning);
- (void)startScanningWithServices:(NSArray<CBUUID *> *)services
advertisementName:(NSString *)advertisementName {
NSDictionary<NSString *, id> *options = @{CBCentralManagerScanOptionAllowDuplicatesKey : @YES};
OCMExpect([self.cbCentralManagerMock scanForPeripheralsWithServices:services options:options]);
[self.centralManager startScanWithAdvertisedName:advertisementName
advertisedServiceUUID:self.centralManager.socketServiceUUID];
XCTAssertTrue(self.centralManager.scanning);
}
- (void)testScanningWithBluetoothOFF {
[_centralManager startScanWithAdvertisedName:nil
advertisedServiceUUID:_centralManager.socketServiceUUID];
XCTAssertTrue(_centralManager.scanning);
[_centralManager stopScan];
XCTAssertFalse(_centralManager.scanning);
[self.centralManager startScanWithAdvertisedName:nil
advertisedServiceUUID:self.centralManager.socketServiceUUID];
XCTAssertTrue(self.centralManager.scanning);
[self.centralManager stopScan];
XCTAssertFalse(self.centralManager.scanning);
}
- (void)testScanningWithBluetoothON {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
NSArray *services = @[ _socketServiceUUID ];
[self startScanningWithServices:services advertismentName:nil];
OCMExpect([_cbCentralManagerMock stopScan]);
[_centralManager stopScan];
XCTAssertFalse(_centralManager.scanning);
self.cbCentralManagerState = CBManagerStatePoweredOn;
NSArray<CBUUID *> *services = @[ self.socketServiceUUID ];
[self startScanningWithServices:services advertisementName:nil];
OCMExpect([self.cbCentralManagerMock stopScan]);
[self.centralManager stopScan];
XCTAssertFalse(self.centralManager.scanning);
}
- (void)testScanningAndPowerONBluetooth {
NSArray *services = @[ _socketServiceUUID ];
[self startScanningWithServices:services advertismentName:nil];
OCMExpect([_centralManagerDelegate centralManagerDidUpdateBLEState:_centralManager]);
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
[_centralManager centralManagerDidUpdateState:_cbCentralManagerMock];
XCTAssertTrue(_centralManager.scanning);
OCMExpect([_cbCentralManagerMock stopScan]);
[_centralManager stopScan];
XCTAssertFalse(_centralManager.scanning);
// Start scanning while powered off.
[self.centralManager startScanWithAdvertisedName:nil
advertisedServiceUUID:self.centralManager.socketServiceUUID];
// Expect a state update and scan command when power turns on.
OCMExpect([self.centralManagerDelegate centralManagerDidUpdateBleState:self.centralManager]);
OCMExpect([self.cbCentralManagerMock
scanForPeripheralsWithServices:@[ self.socketServiceUUID ]
options:@{CBCentralManagerScanOptionAllowDuplicatesKey : @YES}]);
self.cbCentralManagerState = CBManagerStatePoweredOn;
[self.centralManager centralManagerDidUpdateState:self.cbCentralManagerMock];
XCTAssertTrue(self.centralManager.scanning);
OCMExpect([self.cbCentralManagerMock stopScan]);
[self.centralManager stopScan];
XCTAssertFalse(self.centralManager.scanning);
}
- (void)testScanningAndPowerOFFBluetooth {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
NSArray *services = @[ _socketServiceUUID ];
[self startScanningWithServices:services advertismentName:nil];
OCMExpect([_centralManagerDelegate centralManagerDidUpdateBLEState:_centralManager]);
OCMExpect([_cbCentralManagerMock stopScan]);
_cbCentralManagerState = CBCentralManagerStatePoweredOff;
[_centralManager centralManagerDidUpdateState:_cbCentralManagerMock];
XCTAssertTrue(_centralManager.scanning);
[_centralManager stopScan];
XCTAssertFalse(_centralManager.scanning);
self.cbCentralManagerState = CBManagerStatePoweredOn;
NSArray<CBUUID *> *services = @[ self.socketServiceUUID ];
[self startScanningWithServices:services advertisementName:nil];
// Expect a state update when power turns off. The stopScan is implicitly called.
OCMExpect([self.centralManagerDelegate centralManagerDidUpdateBleState:self.centralManager]);
OCMExpect([self.cbCentralManagerMock stopScan]);
self.cbCentralManagerState = CBManagerStatePoweredOff;
[self.centralManager centralManagerDidUpdateState:self.cbCentralManagerMock];
XCTAssertTrue(self.centralManager.scanning);
[self.centralManager stopScan];
XCTAssertFalse(self.centralManager.scanning);
}
- (void)testScanningWithAdvertisedName {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
[self startScanningWithServices:nil advertismentName:@"advertisedname"];
OCMExpect([_cbCentralManagerMock stopScan]);
[_centralManager stopScan];
XCTAssertFalse(_centralManager.scanning);
self.cbCentralManagerState = CBManagerStatePoweredOn;
[self startScanningWithServices:nil advertisementName:@"advertisedname"];
OCMExpect([self.cbCentralManagerMock stopScan]);
[self.centralManager stopScan];
XCTAssertFalse(self.centralManager.scanning);
}
#pragma mark - Scanning with no advertised name
- (void)testScanningPeripheralWithWrongPeripheralService {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
[self startScanningWithServices:@[ _socketServiceUUID ] advertismentName:nil];
self.cbCentralManagerState = CBManagerStatePoweredOn;
[self startScanningWithServices:@[ self.socketServiceUUID ] advertisementName:nil];
CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]);
NSDictionary *advertisementData = @{ CBAdvertisementDataServiceUUIDsKey: @[ [NSUUID UUID] ] };
[_centralManager centralManager:_cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(19)];
NSDictionary<NSString *, id> *advertisementData =
@{CBAdvertisementDataServiceUUIDsKey : @[ [NSUUID UUID] ]};
// Expect no delegate callback since the service UUID does not match.
[self.centralManager centralManager:self.cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(19)];
OCMVerifyAll(peripheral);
}
- (void)testScanningPeripheral {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
[self startScanningWithServices:@[ _socketServiceUUID ] advertismentName:nil];
self.cbCentralManagerState = CBManagerStatePoweredOn;
[self startScanningWithServices:@[ self.socketServiceUUID ] advertisementName:nil];
CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]);
OCMStub([peripheral identifier]).andReturn([NSUUID UUID]);
NSDictionary *advertisementData = @{
CBAdvertisementDataServiceUUIDsKey : @[ _socketServiceUUID ]
};
OCMExpect([_centralManagerDelegate
centralManager:_centralManager
didDiscoverPeer:[OCMArg checkWithBlock:^BOOL(GNSCentralPeerManager *centralPeerManager) {
NSDictionary<NSString *, id> *advertisementData =
@{CBAdvertisementDataServiceUUIDsKey : @[ self.socketServiceUUID ]};
OCMExpect([self.centralManagerDelegate centralManager:self.centralManager
didDiscoverPeer:[OCMArg any]
advertisementData:[OCMArg any]])
.andDo(^(NSInvocation *invocation) {
__unsafe_unretained GNSCentralPeerManager *centralPeerManager;
[invocation getArgument:&centralPeerManager atIndex:3];
XCTAssertEqual(centralPeerManager.cbPeripheral, peripheral);
return YES;
}]
advertisementData:[OCMArg any]]);
[_centralManager centralManager:_cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(42)];
});
[self.centralManager centralManager:self.cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(42)];
OCMVerifyAll(peripheral);
}
#pragma mark - Scanning with advertised name
- (void)testScanningPeripheralWithWrongAdvertisedName {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
[self startScanningWithServices:nil advertismentName:@"advertisedname"];
_cbCentralManagerState = CBManagerStatePoweredOn;
[self startScanningWithServices:nil advertisementName:@"advertisedname"];
CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]);
NSDictionary *advertisementData = @{
NSDictionary<NSString *, id> *advertisementData = @{
CBAdvertisementDataServiceUUIDsKey : @[ [NSUUID UUID] ],
CBAdvertisementDataLocalNameKey : @"wrongadvertisedname",
};
[_centralManager centralManager:_cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(19)];
// The central manager's delegate is not expected to be called because the
// advertised name "wrongadvertisedname" does not match "advertisedname".
// The strict mock on the delegate will ensure this behavior is verified.
[self.centralManager centralManager:self.cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(19)];
}
- (void)testScanningPeripheralWithRightAdvertisedName {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
_cbCentralManagerState = CBManagerStatePoweredOn;
NSString *advertisedName = @"advertisedname";
[self startScanningWithServices:nil advertismentName:advertisedName];
[self startScanningWithServices:nil advertisementName:advertisedName];
CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]);
OCMStub([peripheral identifier]).andReturn([NSUUID UUID]);
NSDictionary *advertisementData = @{
CBAdvertisementDataServiceUUIDsKey : @[ _socketServiceUUID ],
NSDictionary<NSString *, id> *advertisementData = @{
CBAdvertisementDataServiceUUIDsKey : @[ [NSUUID UUID] ],
CBAdvertisementDataLocalNameKey : advertisedName,
};
OCMExpect([_centralManagerDelegate centralManager:_centralManager
didDiscoverPeer:[OCMArg any]
advertisementData:[OCMArg any]]);
[_centralManager centralManager:_cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(19)];
// Expect the delegate to be called because the advertised name matches.
// Use a checkWithBlock to verify the correct peripheral is passed.
id peerManagerCheck = [OCMArg checkWithBlock:^BOOL(id obj) {
GNSCentralPeerManager *peer = (GNSCentralPeerManager *)obj;
XCTAssertEqual(peer.cbPeripheral, peripheral);
return YES;
}];
OCMExpect([self.centralManagerDelegate centralManager:self.centralManager
didDiscoverPeer:peerManagerCheck
advertisementData:advertisementData]);
[self.centralManager centralManager:self.cbCentralManagerMock
didDiscoverPeripheral:peripheral
advertisementData:advertisementData
RSSI:@(19)];
}
#pragma mark - Peripheral Retrieval
@@ -214,86 +251,86 @@
peripheralState:(CBPeripheralState *)peripheralState {
CBPeripheral *peripheral = OCMStrictClassMock([CBPeripheral class]);
OCMStub([peripheral identifier]).andReturn(identifier);
OCMStub([peripheral state])
.andDo(^(NSInvocation *invocation) {
[invocation setReturnValue:peripheralState];
});
[_mockObjectsToVerify addObject:(OCMockObject *)peripheral];
OCMStub([peripheral state]).andDo(^(NSInvocation *invocation) {
[invocation setReturnValue:peripheralState];
});
[self.mockObjectsToVerify addObject:(OCMockObject *)peripheral];
return peripheral;
}
- (GNSCentralPeerManager *)retrieveCentralPeerWithPeripheral:(CBPeripheral *)peripheral {
NSUUID *identifier = peripheral.identifier;
OCMExpect([_cbCentralManagerMock retrievePeripheralsWithIdentifiers:@[ identifier ]])
.andReturn([NSArray arrayWithObject:peripheral]);
NSUUID *identifier = [peripheral identifier];
OCMExpect([self.cbCentralManagerMock retrievePeripheralsWithIdentifiers:@[ identifier ]])
.andReturn(@[ peripheral ]);
GNSCentralPeerManager *centralPeerManager =
[_centralManager retrieveCentralPeerWithIdentifier:identifier];
OCMStub([centralPeerManager cbPeripheral]).andReturn(peripheral);
[self.centralManager retrieveCentralPeerWithIdentifier:identifier];
OCMStub([centralPeerManager identifier]).andReturn(identifier);
XCTAssertNotNil(centralPeerManager);
[_mockObjectsToVerify addObject:(OCMockObject *)centralPeerManager];
[self.mockObjectsToVerify addObject:(OCMockObject *)centralPeerManager];
return centralPeerManager;
}
- (void)testRetrieveCentralPeerAndConnectDisconnect {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
self.cbCentralManagerState = CBManagerStatePoweredOn;
NSUUID *identifier = [NSUUID UUID];
CBPeripheralState peripheralMockState = CBPeripheralStateConnected;
CBPeripheral *peripheral =
[self prepareCBPeripheralWithIdentifier:identifier peripheralState:&peripheralMockState];
CBPeripheral *peripheral = [self prepareCBPeripheralWithIdentifier:identifier
peripheralState:&peripheralMockState];
GNSCentralPeerManager *centralPeerManager = [self retrieveCentralPeerWithPeripheral:peripheral];
OCMExpect([centralPeerManager bleConnected]);
[_centralManager centralManager:_cbCentralManagerMock didConnectPeripheral:peripheral];
[self.centralManager centralManager:self.cbCentralManagerMock didConnectPeripheral:peripheral];
NSError *error = [NSError errorWithDomain:@"test" code:1 userInfo:nil];
OCMExpect([centralPeerManager bleDisconnectedWithError:error]);
peripheralMockState = CBPeripheralStateDisconnected;
[_centralManager centralManager:_cbCentralManagerMock
didDisconnectPeripheral:peripheral
error:error];
[self.centralManager centralManager:self.cbCentralManagerMock
didDisconnectPeripheral:peripheral
error:error];
}
- (void)testRetrieveTwiceCentralPeer {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
self.cbCentralManagerState = CBManagerStatePoweredOn;
NSUUID *identifier = [NSUUID UUID];
CBPeripheralState peripheralMockState = CBPeripheralStateConnected;
CBPeripheral *peripheral =
[self prepareCBPeripheralWithIdentifier:identifier peripheralState:&peripheralMockState];
CBPeripheral *peripheral = [self prepareCBPeripheralWithIdentifier:identifier
peripheralState:&peripheralMockState];
GNSCentralPeerManager *centralPeerManager = [self retrieveCentralPeerWithPeripheral:peripheral];
XCTAssertNil([_centralManager retrieveCentralPeerWithIdentifier:identifier]);
XCTAssertNil([self.centralManager retrieveCentralPeerWithIdentifier:identifier]);
OCMExpect([centralPeerManager bleConnected]);
[_centralManager centralManager:_cbCentralManagerMock didConnectPeripheral:peripheral];
[self.centralManager centralManager:self.cbCentralManagerMock didConnectPeripheral:peripheral];
NSError *error = [NSError errorWithDomain:@"test" code:1 userInfo:nil];
OCMExpect([centralPeerManager bleDisconnectedWithError:error]);
peripheralMockState = CBPeripheralStateDisconnected;
[_centralManager centralManager:_cbCentralManagerMock
didDisconnectPeripheral:peripheral
error:error];
[_centralManager centralPeerManagerDidDisconnect:centralPeerManager];
[self.centralManager centralManager:self.cbCentralManagerMock
didDisconnectPeripheral:peripheral
error:error];
[self.centralManager centralPeerManagerDidDisconnect:centralPeerManager];
// Retrieve a second, different peer.
NSUUID *identifier2 = [NSUUID UUID];
CBPeripheralState peripheralState2 = CBPeripheralStateConnected;
CBPeripheral *peripheral2 =
[self prepareCBPeripheralWithIdentifier:identifier2 peripheralState:&peripheralState2];
CBPeripheral *peripheral2 = [self prepareCBPeripheralWithIdentifier:identifier2
peripheralState:&peripheralState2];
GNSCentralPeerManager *centralPeerManager2 = [self retrieveCentralPeerWithPeripheral:peripheral2];
XCTAssertNotNil(centralPeerManager2);
XCTAssertNotEqual(centralPeerManager, centralPeerManager2);
}
- (void)testRetrieveCentralPeerAndConnectFailToConnect {
_cbCentralManagerState = CBCentralManagerStatePoweredOn;
- (void)testRetrieveCentralPeerAndFailToConnect {
self.cbCentralManagerState = CBManagerStatePoweredOn;
NSUUID *identifier = [NSUUID UUID];
CBPeripheralState peripheralMockState = CBPeripheralStateConnected;
CBPeripheral *peripheral =
[self prepareCBPeripheralWithIdentifier:identifier peripheralState:&peripheralMockState];
CBPeripheral *peripheral = [self prepareCBPeripheralWithIdentifier:identifier
peripheralState:&peripheralMockState];
GNSCentralPeerManager *centralPeerManager = [self retrieveCentralPeerWithPeripheral:peripheral];
OCMExpect([centralPeerManager bleConnected]);
[_centralManager centralManager:_cbCentralManagerMock didConnectPeripheral:peripheral];
[self.centralManager centralManager:self.cbCentralManagerMock didConnectPeripheral:peripheral];
NSError *error = [NSError errorWithDomain:@"test" code:1 userInfo:nil];
OCMExpect([centralPeerManager bleDisconnectedWithError:error]);
peripheralMockState = CBPeripheralStateDisconnected;
[_centralManager centralManager:_cbCentralManagerMock
didFailToConnectPeripheral:peripheral
error:error];
[self.centralManager centralManager:self.cbCentralManagerMock
didFailToConnectPeripheral:peripheral
error:error];
}
@end
@end