Skip to content

Commit 1032ea2

Browse files
authored
Merge pull request novastone-media#373 from kirillyakimovich/session_manager_reconnection_tests
Session manager reconnection test
2 parents a8a96ca + 03842d2 commit 1032ea2

File tree

3 files changed

+87
-119
lines changed

3 files changed

+87
-119
lines changed

MQTTClient/MQTTClient/MQTTSessionManager.m

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -458,6 +458,9 @@ - (void)reconnect {
458458
}
459459

460460
- (void)connectToLast {
461+
if (self.state == MQTTSessionManagerStateConnected) {
462+
return;
463+
}
461464
[self.reconnectTimer resetRetryInterval];
462465
[self reconnect];
463466
}

MQTTClient/MQTTClientTests/MQTTTestHelpers.m

Lines changed: 0 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -41,55 +41,6 @@ - (void)setUp {
4141
(self.brokers)[brokerName] = broker;
4242
}
4343
}
44-
//
45-
// NSDictionary *eclipseBroker = @{
46-
// @"host": @"m2m.eclipse.org",
47-
// @"port": @1883,
48-
// @"tls": @NO,
49-
// @"protocollevel": @4,
50-
// @"timeout": @10
51-
// };
52-
// [self.brokers setObject:eclipseBroker forKey:@"eclipseBroker"];
53-
//
54-
//
55-
// NSDictionary *pahoBroker = @{
56-
// @"host": @"iot.eclipse.org",
57-
// @"port": @1883,
58-
// @"tls": @NO,
59-
// @"protocollevel": @4,
60-
// @"timeout": @10
61-
// };
62-
// [self.brokers setObject:pahoBroker forKey:@"pahoBroker"];
63-
//
64-
//
65-
// NSDictionary *m2mBroker = @{
66-
// @"host": @"q.m2m.io",
67-
// @"port": @1883,
68-
// @"tls": @NO,
69-
// @"protocollevel": @4,
70-
// @"timeout": @10
71-
// };
72-
// [self.brokers setObject:m2mBroker forKey:@"m2mBroker"];
73-
//
74-
//
75-
// NSDictionary *hivemqBroker = @{
76-
// @"host": @"broker.mqtt-dashboard.com",
77-
// @"port": @1883,
78-
// @"tls": @NO,
79-
// @"protocollevel": @4,
80-
// @"timeout": @30
81-
// };
82-
// [self.brokers setObject:hivemqBroker forKey:@"hivemqBroker"];
83-
//
84-
//
85-
// NSDictionary *rabbitmqBroker = @{
86-
// @"host": @"dev.rabbitmq.com",
87-
// @"port": @1883,
88-
// @"tls": @NO,
89-
// @"protocollevel": @4,
90-
// @"timeout": @10
91-
// };
92-
// [self.brokers setObject:rabbitmqBroker forKey:@"rabbitmqBroker"];
9344

9445
self.timer = [NSTimer scheduledTimerWithTimeInterval:1
9546
target:self

MQTTClient/MQTTClientTests/MQTTTestSessionManager.m

Lines changed: 84 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,36 @@
1313
#import "MQTTCFSocketTransport.h"
1414
#import "MQTTTestHelpers.h"
1515

16+
@interface MQTTSessionManager (Tests)
17+
18+
- (void)connectWithParameters:(NSDictionary *)parameters clean:(BOOL)clean;
19+
20+
@end
21+
22+
@implementation MQTTSessionManager (Tests)
23+
24+
- (void)connectWithParameters:(NSDictionary *)parameters clean:(BOOL)clean {
25+
[self connectTo:parameters[@"host"]
26+
port:[parameters[@"port"] intValue]
27+
tls:[parameters[@"tls"] boolValue]
28+
keepalive:60
29+
clean:clean
30+
auth:NO
31+
user:nil
32+
pass:nil
33+
will:NO
34+
willTopic:nil
35+
willMsg:nil
36+
willQos:MQTTQosLevelAtMostOnce
37+
willRetainFlag:NO
38+
withClientId:nil
39+
securityPolicy:[MQTTTestHelpers securityPolicy:parameters]
40+
certificates:[MQTTTestHelpers clientCerts:parameters]
41+
protocolLevel:[parameters[@"protocollevel"] intValue]];
42+
}
43+
44+
@end
45+
1646
@interface MQTTTestSessionManager : MQTTTestHelpers <MQTTSessionManagerDelegate>
1747
@property (nonatomic) int step;
1848
@property (nonatomic) int sent;
@@ -56,22 +86,7 @@ - (void)testMQTTSessionManager:(BOOL)clean {
5686
options:NSKeyValueObservingOptionInitial | NSKeyValueObservingOptionNew
5787
context:nil];
5888
manager.subscriptions = [@{TOPIC: @(0)} mutableCopy];
59-
[manager connectTo:parameters[@"host"]
60-
port:[parameters[@"port"] intValue]
61-
tls:[parameters[@"tls"] boolValue]
62-
keepalive:60
63-
clean:clean
64-
auth:NO
65-
user:nil
66-
pass:nil
67-
will:NO
68-
willTopic:nil
69-
willMsg:nil
70-
willQos:MQTTQosLevelAtMostOnce
71-
willRetainFlag:FALSE
72-
withClientId:nil
73-
securityPolicy:[MQTTTestHelpers securityPolicy:parameters]
74-
certificates:[MQTTTestHelpers clientCerts:parameters]];
89+
[manager connectWithParameters:parameters clean:clean];
7590

7691
while (self.step == -1 && manager.state != MQTTSessionManagerStateConnected) {
7792
DDLogInfo(@"[testMQTTSessionManager] waiting for connect %d", manager.state);
@@ -165,22 +180,7 @@ - (void)testMQTTSessionManagerPersistent {
165180
context:nil];
166181

167182
manager.subscriptions = [@{TOPIC: @(0)} mutableCopy];
168-
[manager connectTo:parameters[@"host"]
169-
port:[parameters[@"port"] intValue]
170-
tls:[parameters[@"tls"] boolValue]
171-
keepalive:60
172-
clean:TRUE
173-
auth:NO
174-
user:nil
175-
pass:nil
176-
will:NO
177-
willTopic:nil
178-
willMsg:nil
179-
willQos:MQTTQosLevelAtMostOnce
180-
willRetainFlag:FALSE
181-
withClientId:nil
182-
securityPolicy:[MQTTTestHelpers securityPolicy:parameters]
183-
certificates:[MQTTTestHelpers clientCerts:parameters]];
183+
[manager connectWithParameters:parameters clean:YES];
184184
while (self.step == -1 && manager.state != MQTTSessionManagerStateConnected) {
185185
DDLogInfo(@"[testMQTTSessionManagerPersistent] waiting for connect %d", manager.state);
186186
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
@@ -267,22 +267,7 @@ - (void)testSessionManagerShort {
267267

268268

269269
manager.subscriptions = @{TOPIC: @(MQTTQosLevelExactlyOnce)};
270-
[manager connectTo:parameters[@"host"]
271-
port:[parameters[@"port"] intValue]
272-
tls:[parameters[@"tls"] boolValue]
273-
keepalive:60
274-
clean:TRUE
275-
auth:NO
276-
user:nil
277-
pass:nil
278-
will:NO
279-
willTopic:nil
280-
willMsg:nil
281-
willQos:MQTTQosLevelAtMostOnce
282-
willRetainFlag:FALSE
283-
withClientId:nil
284-
securityPolicy:[MQTTTestHelpers securityPolicy:parameters]
285-
certificates:[MQTTTestHelpers clientCerts:parameters]];
270+
[manager connectWithParameters:parameters clean:YES];
286271

287272
while (!self.timedout && manager.state != MQTTSessionManagerStateConnected) {
288273
DDLogInfo(@"waiting for connect %d", manager.state);
@@ -415,24 +400,8 @@ - (void)testSessionManagerALotSubscriptions {
415400
selector:@selector(timedout:)
416401
userInfo:nil
417402
repeats:false];
418-
419-
420-
[manager connectTo:parameters[@"host"]
421-
port:[parameters[@"port"] intValue]
422-
tls:[parameters[@"tls"] boolValue]
423-
keepalive:60
424-
clean:TRUE
425-
auth:NO
426-
user:nil
427-
pass:nil
428-
will:NO
429-
willTopic:nil
430-
willMsg:nil
431-
willQos:MQTTQosLevelAtMostOnce
432-
willRetainFlag:FALSE
433-
withClientId:nil
434-
securityPolicy:[MQTTTestHelpers securityPolicy:parameters]
435-
certificates:[MQTTTestHelpers clientCerts:parameters]];
403+
404+
[manager connectWithParameters:parameters clean:YES];
436405

437406
while (!self.timedout && manager.state != MQTTSessionManagerStateConnected) {
438407
DDLogInfo(@"waiting for connect %d", manager.state);
@@ -596,8 +565,7 @@ - (void)testSessionManagerALotSubscriptions {
596565
selector:@selector(timedout:)
597566
userInfo:nil
598567
repeats:false];
599-
600-
568+
601569
while (!self.timedout) {
602570
[manager sendData:[[NSDate date].description dataUsingEncoding:NSUTF8StringEncoding]
603571
topic:TOPIC qos:MQTTQosLevelExactlyOnce retain:FALSE];
@@ -612,8 +580,7 @@ - (void)testSessionManagerALotSubscriptions {
612580
selector:@selector(timedout:)
613581
userInfo:nil
614582
repeats:false];
615-
616-
583+
617584
while (!self.timedout) {
618585
[manager sendData:[[NSDate date].description dataUsingEncoding:NSUTF8StringEncoding]
619586
topic:TOPIC qos:MQTTQosLevelExactlyOnce retain:FALSE];
@@ -643,6 +610,53 @@ - (void)testSessionManagerALotSubscriptions {
643610
}
644611
}
645612

613+
- (void)testMQTTSessionManagerRecconnectionWithConnectToLast {
614+
for (NSString *broker in self.brokers.allKeys) {
615+
DDLogInfo(@"testing broker %@", broker);
616+
NSDictionary *parameters = self.brokers[broker];
617+
if ([parameters[@"websocket"] boolValue]) {
618+
continue;
619+
}
620+
self.step = -1;
621+
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:[parameters[@"timeout"] intValue]
622+
target:self
623+
selector:@selector(stepper:)
624+
userInfo:nil
625+
repeats:true];
626+
627+
MQTTSessionManager *manager = [[MQTTSessionManager alloc] init];
628+
manager.delegate = self;
629+
630+
[manager connectWithParameters:parameters clean:YES];
631+
632+
while (self.step == -1 && manager.state != MQTTSessionManagerStateConnected) {
633+
DDLogInfo(@"[testMQTTSessionManager] waiting for connect %d", manager.state);
634+
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
635+
}
636+
XCTAssertEqual(manager.state, MQTTSessionManagerStateConnected);
637+
638+
[manager disconnect];
639+
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
640+
641+
XCTAssertEqual(manager.state, MQTTSessionManagerStateClosed);
642+
643+
while (self.step <= 0) {
644+
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
645+
}
646+
647+
[manager connectToLast];
648+
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
649+
650+
XCTAssertEqual(manager.state, MQTTSessionManagerStateConnected);
651+
652+
while (self.step <= 1) {
653+
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
654+
}
655+
656+
[timer invalidate];
657+
}
658+
}
659+
646660
#pragma mark - helpers
647661

648662

0 commit comments

Comments
 (0)