@@ -73,7 +73,10 @@ - (void)setUp {
73
73
[super setUp ];
74
74
_mockClient = OCMClassMock ([FIRMessagingClient class ]);
75
75
_mockReceiver = OCMClassMock ([FIRMessagingReceiver class ]);
76
- _mockRmqManager = OCMClassMock ([FIRMessagingRmqManager class ]);
76
+ FIRMessagingRmqManager *newRmqManager =
77
+ [[FIRMessagingRmqManager alloc ] initWithDatabaseName: kRmqDatabaseName ];
78
+ [newRmqManager loadRmqId ];
79
+ _mockRmqManager = OCMPartialMock (newRmqManager);
77
80
_mockSyncMessageManager = OCMClassMock ([FIRMessagingSyncMessageManager class ]);
78
81
_dataMessageManager = [[FIRMessagingDataMessageManager alloc ]
79
82
initWithDelegate: _mockReceiver
@@ -110,9 +113,8 @@ - (void)testSendValidMessage_withNoConnection {
110
113
};
111
114
OCMExpect ([self .mockReceiver willSendDataMessageWithID: [OCMArg isEqual: messageID]
112
115
error: [OCMArg isNil ]]);
113
- [[[self .mockRmqManager stub ] andReturnValue: @YES ]
114
- saveRmqMessage: [OCMArg checkWithBlock: isValidStanza]
115
- error: [OCMArg anyObjectRef ]];
116
+ [[self .mockRmqManager stub ] saveRmqMessage: [OCMArg checkWithBlock: isValidStanza]
117
+ withCompletionHandler: [OCMArg invokeBlockWithArgs: @(YES ), nil ]];
116
118
117
119
// should be logged into the service
118
120
[self .dataMessageManager setDeviceAuthID: @" auth-id" secretToken: @" secret-token" ];
@@ -204,8 +206,8 @@ - (void)testSendInvalidMessage_withSizeExceeded {
204
206
- (void )testSendValidMessage_withRmqSaveError {
205
207
NSString *messageID = @" 1" ;
206
208
NSMutableDictionary *message = [self standardFIRMessagingMessageWithMessageID: messageID];
207
- [[[ self .mockRmqManager stub ] andReturnValue: @ NO ]
208
- saveRmqMessage: [OCMArg any ] error : [OCMArg anyObjectRef ]];
209
+ [[self .mockRmqManager stub ] saveRmqMessage: [OCMArg any ]
210
+ withCompletionHandler : [OCMArg invokeBlockWithArgs: @( NO ), nil ]];
209
211
210
212
OCMExpect ([self .mockReceiver
211
213
willSendDataMessageWithID: [OCMArg isEqual: messageID]
@@ -261,7 +263,6 @@ - (void)XXX_testSendValidMessage_withTTL0AndNoFIRMessagingConnection {
261
263
NSString *messageID = @" 1" ;
262
264
NSMutableDictionary *message = [self upstreamMessageWithID: messageID ttl: 0 delay: 0 ];
263
265
264
-
265
266
BOOL (^isValidStanza)(id obj) = ^BOOL (id obj) {
266
267
if ([obj isKindOfClass: [GtalkDataMessageStanza class ]]) {
267
268
GtalkDataMessageStanza *stanza = (GtalkDataMessageStanza *)obj;
@@ -283,8 +284,7 @@ - (void)XXX_testSendValidMessage_withTTL0AndNoFIRMessagingConnection {
283
284
OCMVerifyAll (self.mockClient );
284
285
}
285
286
286
- // TODO: Investigate why this test is flaky
287
- - (void )xxx_testSendValidMessage_withTTL0AndNoNetwork {
287
+ - (void )testSendValidMessage_withTTL0AndNoNetwork {
288
288
// simulate a invalid connection
289
289
[[[self .mockClient stub ] andReturnValue: @NO ] isConnectionActive ];
290
290
@@ -321,27 +321,17 @@ - (void)XXX_testDelayedMessagesBeingResentOnReconnect {
321
321
NSMutableDictionary *message = [self upstreamMessageWithID: messageID ttl: ttl delay: 1 ];
322
322
323
323
__block GtalkDataMessageStanza *firstMessageStanza;
324
-
325
- OCMStub ([self .mockRmqManager saveRmqMessage: [OCMArg any ]
326
- error: [OCMArg anyObjectRef ]]).andReturn (YES );
324
+ [[self .mockRmqManager stub ] saveRmqMessage: [OCMArg any ]
325
+ withCompletionHandler: [OCMArg invokeBlockWithArgs: @(YES ), nil ]];
327
326
328
327
OCMExpect ([self .mockReceiver willSendDataMessageWithID: [OCMArg isEqual: messageID]
329
328
error: [OCMArg isNil ]]);
330
329
331
330
[self .dataMessageManager setDeviceAuthID: @" auth-id" secretToken: @" secret-token" ];
332
331
[self .dataMessageManager sendDataMessageStanza: message];
333
332
334
- __block FIRMessagingDataMessageHandler dataMessageHandler;
335
-
336
- [[[self .mockRmqManager stub ] andDo: ^(NSInvocation *invocation) {
337
- dataMessageHandler ([FIRMessagingGetRmq2Id (firstMessageStanza) longLongValue ],
338
- firstMessageStanza);
339
- }]
340
- scanWithRmqMessageHandler: [OCMArg isNil ]
341
- dataMessageHandler: [OCMArg checkWithBlock: ^BOOL (id obj) {
342
- dataMessageHandler = obj;
343
- return YES ;
344
- }]];
333
+ [[self .mockRmqManager stub ] scanWithRmqMessageHandler:
334
+ [OCMArg invokeBlockWithArgs: @{FIRMessagingGetRmq2Id (firstMessageStanza): firstMessageStanza}, nil ]];
345
335
346
336
// expect both 1 and 2 messages to be sent once we regain connection
347
337
__block BOOL firstMessageSent = NO ;
@@ -481,20 +471,12 @@ - (void)testReceivingDuplicateDuplexMessage {
481
471
* the client receives a Streaming ACK which should result in resending RMQ messages.
482
472
*/
483
473
- (void )testResendSavedMessages {
484
- static BOOL isClientConnected = NO ;
485
- [[[self .mockClient stub ] andDo: ^(NSInvocation *invocation) {
486
- [invocation setReturnValue: &isClientConnected];
487
- }] isConnectionActive ];
474
+ XCTestExpectation *expectation = [self expectationWithDescription: @" scan is complete" ];
488
475
476
+ static BOOL isClientConnected = NO ;
477
+ [[[self .mockClient stub ] andReturnValue: @(isClientConnected)] isConnectionActive ];
489
478
// Set a fake, valid bundle identifier
490
479
[[[self .mockDataMessageManager stub ] andReturn: @" gcm-dmm-test" ] categoryForUpstreamMessages ];
491
-
492
- FIRMessagingRmqManager *newRmqManager =
493
- [[FIRMessagingRmqManager alloc ] initWithDatabaseName: kRmqDatabaseName ];
494
- [newRmqManager loadRmqId ];
495
- // have a real RMQ store
496
- [self .dataMessageManager setRmq2Manager: newRmqManager];
497
-
498
480
[self .dataMessageManager setDeviceAuthID: @" auth-id" secretToken: @" secret-token" ];
499
481
500
482
// send a couple of message with no connection should be saved to RMQ
@@ -517,23 +499,25 @@ - (void)testResendSavedMessages {
517
499
NSLog (@" hello resending %@ , %d " , message.id_p , didRecieveMessages);
518
500
if ([@" 1" isEqualToString: message.id_p]) {
519
501
didRecieveMessages |= 1 ; // right most bit for 1st message
520
- return YES ;
521
502
} else if ([@" 2" isEqualToString: message.id_p]) {
522
503
didRecieveMessages |= (1 <<1 ); // second from RMB for 2nd message
523
- return YES ;
504
+ } else {
505
+ return NO ;
506
+ }
507
+ if (didRecieveMessages == 3 ) {
508
+ [expectation fulfill ];
524
509
}
510
+ return YES ;
525
511
}
526
512
return NO ;
527
513
};
528
- [[[mockConnection stub ] andDo: ^(NSInvocation *invocation) {
529
- // pass
530
- }] sendProto: [OCMArg checkWithBlock: resendMessageBlock]];
531
-
514
+ [[mockConnection stub ] sendProto: [OCMArg checkWithBlock: resendMessageBlock]];
532
515
[self .dataMessageManager resendMessagesWithConnection: mockConnection];
533
516
534
517
// should send both messages
535
- XCTAssert (didRecieveMessages == 3 );
536
518
OCMVerifyAll (mockConnection);
519
+
520
+ [self waitForExpectationsWithTimeout: 5.0 handler: nil ];
537
521
}
538
522
539
523
- (void )testResendingExpiredMessagesFails {
@@ -546,12 +530,6 @@ - (void)testResendingExpiredMessagesFails {
546
530
// Set a fake, valid bundle identifier
547
531
[[[self .mockDataMessageManager stub ] andReturn: @" gcm-dmm-test" ] categoryForUpstreamMessages ];
548
532
549
- FIRMessagingRmqManager *newRmqManager =
550
- [[FIRMessagingRmqManager alloc ] initWithDatabaseName: kRmqDatabaseName ];
551
- [newRmqManager loadRmqId ];
552
- // have a real RMQ store
553
- [self .dataMessageManager setRmq2Manager: newRmqManager];
554
-
555
533
[self .dataMessageManager setDeviceAuthID: @" auth-id" secretToken: @" secret-token" ];
556
534
// send a message that expires in 1 sec
557
535
[self .dataMessageManager sendDataMessageStanza:
@@ -562,15 +540,13 @@ - (void)testResendingExpiredMessagesFails {
562
540
isClientConnected = YES ;
563
541
564
542
id mockConnection = OCMClassMock ([FIRMessagingConnection class ]);
565
-
566
543
[[mockConnection reject ] sendProto: [OCMArg any ]];
567
- [self .dataMessageManager resendMessagesWithConnection: mockConnection];
544
+ [[self .mockRmqManager stub ] scanWithRmqMessageHandler: [OCMArg checkWithBlock: ^BOOL (id obj) {
545
+ return YES ;
546
+ }]];
568
547
569
- // rmq should not have any pending messages
570
- [newRmqManager scanWithRmqMessageHandler: ^(int64_t rmqId, int8_t tag, NSData *data) {
571
- XCTFail (@" RMQ should not have any message" );
572
- }
573
- dataMessageHandler: nil ];
548
+ [self .dataMessageManager resendMessagesWithConnection: mockConnection];
549
+ OCMVerifyAll (self.mockRmqManager );
574
550
}
575
551
576
552
#pragma mark - Create Packet
0 commit comments