Skip to content

Commit 01e0bf9

Browse files
committed
[NEW] stricter tests on PUBLISH
[FIX] warning when receiving long payloads [NEW] a bit of work on tests
1 parent df527f1 commit 01e0bf9

17 files changed

+203
-172
lines changed

MQTTClient/MQTTClient.xcodeproj/project.pbxproj

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2398,8 +2398,8 @@
23982398
GCC_WARN_UNINITIALIZED_AUTOS = YES;
23992399
GCC_WARN_UNUSED_FUNCTION = YES;
24002400
GCC_WARN_UNUSED_VARIABLE = YES;
2401-
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
2402-
MACOSX_DEPLOYMENT_TARGET = 10.11;
2401+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
2402+
MACOSX_DEPLOYMENT_TARGET = 10.14;
24032403
ONLY_ACTIVE_ARCH = YES;
24042404
SDKROOT = iphoneos;
24052405
};
@@ -2443,8 +2443,8 @@
24432443
GCC_WARN_UNINITIALIZED_AUTOS = YES;
24442444
GCC_WARN_UNUSED_FUNCTION = YES;
24452445
GCC_WARN_UNUSED_VARIABLE = YES;
2446-
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
2447-
MACOSX_DEPLOYMENT_TARGET = 10.11;
2446+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
2447+
MACOSX_DEPLOYMENT_TARGET = 10.14;
24482448
SDKROOT = iphoneos;
24492449
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
24502450
VALIDATE_PRODUCT = YES;
@@ -2547,7 +2547,7 @@
25472547
TARGETED_DEVICE_FAMILY = 4;
25482548
VERSIONING_SYSTEM = "apple-generic";
25492549
VERSION_INFO_PREFIX = "";
2550-
WATCHOS_DEPLOYMENT_TARGET = 3.2;
2550+
WATCHOS_DEPLOYMENT_TARGET = 5.0;
25512551
};
25522552
name = Debug;
25532553
};
@@ -2579,7 +2579,7 @@
25792579
TARGETED_DEVICE_FAMILY = 4;
25802580
VERSIONING_SYSTEM = "apple-generic";
25812581
VERSION_INFO_PREFIX = "";
2582-
WATCHOS_DEPLOYMENT_TARGET = 3.2;
2582+
WATCHOS_DEPLOYMENT_TARGET = 5.0;
25832583
};
25842584
name = Release;
25852585
};
@@ -2597,7 +2597,7 @@
25972597
DEVELOPMENT_TEAM = C652JFWU23;
25982598
GCC_C_LANGUAGE_STANDARD = gnu11;
25992599
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
2600-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2600+
MACOSX_DEPLOYMENT_TARGET = 10.14;
26012601
MTL_ENABLE_DEBUG_INFO = YES;
26022602
PRODUCT_NAME = "$(TARGET_NAME)";
26032603
SDKROOT = macosx;
@@ -2619,7 +2619,7 @@
26192619
DEVELOPMENT_TEAM = C652JFWU23;
26202620
GCC_C_LANGUAGE_STANDARD = gnu11;
26212621
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
2622-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2622+
MACOSX_DEPLOYMENT_TARGET = 10.14;
26232623
MTL_ENABLE_DEBUG_INFO = NO;
26242624
PRODUCT_NAME = "$(TARGET_NAME)";
26252625
SDKROOT = macosx;
@@ -2643,7 +2643,7 @@
26432643
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
26442644
INFOPLIST_FILE = "$(SRCROOT)/MQTTFramework/Info.plist";
26452645
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2646-
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
2646+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
26472647
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
26482648
MTL_ENABLE_DEBUG_INFO = YES;
26492649
OTHER_LDFLAGS = "-ObjC";
@@ -2674,7 +2674,7 @@
26742674
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
26752675
INFOPLIST_FILE = "$(SRCROOT)/MQTTFramework/Info.plist";
26762676
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
2677-
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
2677+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
26782678
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
26792679
MTL_ENABLE_DEBUG_INFO = NO;
26802680
OTHER_LDFLAGS = "-ObjC";
@@ -2705,7 +2705,7 @@
27052705
INFOPLIST_FILE = MQTTFramework/Info.plist;
27062706
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
27072707
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
2708-
MACOSX_DEPLOYMENT_TARGET = 10.12;
2708+
MACOSX_DEPLOYMENT_TARGET = 10.14;
27092709
MTL_ENABLE_DEBUG_INFO = YES;
27102710
PRODUCT_BUNDLE_IDENTIFIER = org.owntracks.MQTTFramework;
27112711
PRODUCT_NAME = MQTTFramework;
@@ -2735,7 +2735,7 @@
27352735
INFOPLIST_FILE = MQTTFramework/Info.plist;
27362736
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
27372737
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks";
2738-
MACOSX_DEPLOYMENT_TARGET = 10.12;
2738+
MACOSX_DEPLOYMENT_TARGET = 10.14;
27392739
MTL_ENABLE_DEBUG_INFO = NO;
27402740
PRODUCT_BUNDLE_IDENTIFIER = org.owntracks.MQTTFramework;
27412741
PRODUCT_NAME = MQTTFramework;
@@ -2769,7 +2769,7 @@
27692769
SDKROOT = appletvos;
27702770
SKIP_INSTALL = YES;
27712771
TARGETED_DEVICE_FAMILY = 3;
2772-
TVOS_DEPLOYMENT_TARGET = 10.1;
2772+
TVOS_DEPLOYMENT_TARGET = 12.0;
27732773
VERSIONING_SYSTEM = "apple-generic";
27742774
VERSION_INFO_PREFIX = "";
27752775
};
@@ -2799,7 +2799,7 @@
27992799
SDKROOT = appletvos;
28002800
SKIP_INSTALL = YES;
28012801
TARGETED_DEVICE_FAMILY = 3;
2802-
TVOS_DEPLOYMENT_TARGET = 10.1;
2802+
TVOS_DEPLOYMENT_TARGET = 12.0;
28032803
VERSIONING_SYSTEM = "apple-generic";
28042804
VERSION_INFO_PREFIX = "";
28052805
};
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict/>
5+
</plist>

MQTTClient/MQTTClient/MQTTDecoder.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,9 @@ - (void)stream:(NSStream*)sender handleEvent:(NSStreamEvent)eventCode {
131131
self.dataBuffer = nil;
132132
self.state = MQTTDecoderStateDecodingHeader;
133133
} else {
134-
DDLogWarn(@"[MQTTDecoder] oops received (%lu)=%@...",
135-
(unsigned long)self.dataBuffer.length,
136-
[self.dataBuffer subdataWithRange:NSMakeRange(0, MIN(256, self.dataBuffer.length))]);
134+
DDLogDebug(@"[MQTTDecoder] oops received (%lu)=%@...",
135+
(unsigned long)self.dataBuffer.length,
136+
[self.dataBuffer subdataWithRange:NSMakeRange(0, MIN(256, self.dataBuffer.length))]);
137137
}
138138
}
139139
}

MQTTClient/MQTTClient/MQTTSession.m

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,6 +448,32 @@ - (UInt16)publishDataV5:(NSData *)data
448448
@throw myException;
449449
}
450450

451+
if (MQTTStrict.strict &&
452+
topic) {
453+
454+
NSString *stringWithNull = [NSString stringWithFormat:@"%C", 0];
455+
NSString *stringWithFEFF = [NSString stringWithFormat:@"%C", 0xfeff];
456+
NSString *stringWithD800 = [NSString stringWithFormat:@"%C", 0xD800];
457+
NSData *data = [NSData dataWithBytes:"\x9c" length:1];
458+
NSString *stringWith9c = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
459+
460+
NSMutableCharacterSet *illegalSet = [[NSMutableCharacterSet alloc] init];
461+
[illegalSet addCharactersInString:stringWithNull];
462+
[illegalSet addCharactersInString:stringWith9c];
463+
[illegalSet addCharactersInString:stringWithFEFF];
464+
[illegalSet addCharactersInString:stringWithD800];
465+
466+
NSRange range = [topic rangeOfCharacterFromSet:illegalSet];
467+
468+
if (range.location != NSNotFound) {
469+
NSException* myException = [NSException
470+
exceptionWithName:@"topic must not contain non-UTF8 characters"
471+
reason:[NSString stringWithFormat:@"topic = %@", topic]
472+
userInfo:nil];
473+
@throw myException;
474+
}
475+
}
476+
451477
if (MQTTStrict.strict &&
452478
topic &&
453479
([topic containsString:@"+"] ||

MQTTClient/MQTTClientTests/MQTTClientPublishTests.m

Lines changed: 50 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ - (void)testPublish_r0_q0 {
8787
[self shutdown];
8888
}
8989

90+
- (void)testPublish_Dollar {
91+
[self connect];
92+
[self testPublish:[@(__FUNCTION__) dataUsingEncoding:NSUTF8StringEncoding]
93+
onTopic:[NSString stringWithFormat:@"$%@/%s", TOPIC, __FUNCTION__]
94+
retain:NO
95+
atLevel:0];
96+
[self shutdown];
97+
}
98+
9099
/*
91100
* [MQTT-1.5.3-3]
92101
* A UTF-8 encoded sequence 0xEF 0xBB 0xBF is always to be interpreted to mean
@@ -161,37 +170,34 @@ - (void)testPublish_r0_q0_0x0000_MQTT_1_5_3_2 {
161170
[self shutdown];
162171
}
163172

164-
/*
165-
* [MQTT-1.5.3-2]
166-
* A UTF-8 encoded string MUST NOT include an encoding of the null character U+0000.
167-
* If a receiver (Server or Client) receives a Control Packet containing U+0000 it MUST close the Network Connection.
168-
*/
169-
- (void)testPublish_r0_q0_illegal_topic_strict {
170-
MQTTStrict.strict = TRUE;
171-
172-
[self connect];
173-
173+
- (void)testPublish_illegal_topic_9c_strict {
174174
NSData *data = [NSData dataWithBytes:"MQTTClient/abc\x9c\x9dxyz" length:19];
175175
NSString *stringWith9c = [[NSString alloc] initWithData:data encoding:NSISOLatin1StringEncoding];
176-
NSString *stringWithD800 = [NSString stringWithFormat:@"%@/%C/%s", TOPIC, 0xD800, __FUNCTION__];
177-
NSString *stringWithFEFF = [NSString stringWithFormat:@"%@<%C>/%s", TOPIC, 0xfeff, __FUNCTION__];
176+
[self publish_illegal_topic_strict:stringWith9c];
177+
}
178+
179+
- (void)testPublish_illegal_topic_Null_strict {
178180
NSString *stringWithNull = [NSString stringWithFormat:@"%@/%C/%s", TOPIC, 0, __FUNCTION__];
179-
181+
[self publish_illegal_topic_strict:stringWithNull];
182+
}
183+
184+
- (void)testPublish_illegal_topic_FEFF_strict {
185+
NSString *stringWithFEFF = [NSString stringWithFormat:@"%@<%C>/%s", TOPIC, 0xfeff, __FUNCTION__];
186+
[self publish_illegal_topic_strict:stringWithFEFF];
187+
}
188+
189+
- (void)testPublish_illegal_topic_D800_strict {
190+
NSString *stringWithD800 = [NSString stringWithFormat:@"%@/%C/%s", TOPIC, 0xD800, __FUNCTION__];
191+
[self publish_illegal_topic_strict:stringWithD800];
192+
}
193+
194+
- (void)publish_illegal_topic_strict:(NSString *)topic {
195+
MQTTStrict.strict = TRUE;
196+
197+
[self connect];
180198
@try {
181199
[self.session publishDataV5:[[NSData alloc] init]
182-
onTopic:stringWith9c
183-
retain:NO
184-
qos:0
185-
payloadFormatIndicator:nil
186-
messageExpiryInterval:nil
187-
topicAlias:nil
188-
responseTopic:nil
189-
correlationData:nil
190-
userProperties:nil
191-
contentType:nil
192-
publishHandler:nil];
193-
[self.session publishDataV5:[[NSData alloc] init]
194-
onTopic:stringWithNull
200+
onTopic:topic
195201
retain:NO
196202
qos:0
197203
payloadFormatIndicator:nil
@@ -202,40 +208,14 @@ - (void)testPublish_r0_q0_illegal_topic_strict {
202208
userProperties:nil
203209
contentType:nil
204210
publishHandler:nil];
205-
[self.session publishDataV5:[[NSData alloc] init]
206-
onTopic:stringWithFEFF
207-
retain:NO
208-
qos:0
209-
payloadFormatIndicator:nil
210-
messageExpiryInterval:nil
211-
topicAlias:nil
212-
responseTopic:nil
213-
correlationData:nil
214-
userProperties:nil
215-
contentType:nil
216-
publishHandler:nil];
217-
[self.session publishDataV5:[[NSData alloc] init]
218-
onTopic:stringWithD800
219-
retain:NO
220-
qos:0
221-
payloadFormatIndicator:nil
222-
messageExpiryInterval:nil
223-
topicAlias:nil
224-
responseTopic:nil
225-
correlationData:nil
226-
userProperties:nil
227-
contentType:nil
228-
publishHandler:nil];
229-
[self.session connectWithConnectHandler:nil];
230211
XCTFail(@"Should not get here but throw exception before");
231212
} @catch (NSException *exception) {
232-
//;
213+
DDLogInfo(@"Exception correctly raised: %@", exception);
233214
} @finally {
234215
//
235216
}
236217
}
237218

238-
239219
- (void)testPublish_r0_q1 {
240220
[self connect];
241221
[self testPublish:[@(__FUNCTION__) dataUsingEncoding:NSUTF8StringEncoding]
@@ -371,6 +351,10 @@ - (void)testPublish_r1_MQTT_3_3_1_11 {
371351
onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
372352
retain:YES
373353
atLevel:MQTTQosLevelAtLeastOnce];
354+
[self testPublish:[[NSData alloc] init]
355+
onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
356+
retain:YES
357+
atLevel:MQTTQosLevelAtLeastOnce];
374358
[self shutdown];
375359
}
376360

@@ -416,6 +400,10 @@ - (void)testPublish_r1_q2 {
416400
onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
417401
retain:YES
418402
atLevel:2];
403+
[self testPublish:[[NSData alloc] init]
404+
onTopic:[NSString stringWithFormat:@"%@/%s", TOPIC, __FUNCTION__]
405+
retain:YES
406+
atLevel:2];
419407
[self shutdown];
420408
}
421409

@@ -429,6 +417,10 @@ - (void)testPublish_r1_q2_long_topic {
429417
onTopic:[NSString stringWithFormat:@"%@/%@", TOPIC, topic]
430418
retain:YES
431419
atLevel:2];
420+
[self testPublish:[[NSData alloc] init]
421+
onTopic:[NSString stringWithFormat:@"%@/%@", TOPIC, topic]
422+
retain:YES
423+
atLevel:2];
432424
topic = [topic stringByAppendingString:topic];
433425
}
434426

@@ -447,7 +439,10 @@ - (void)testPublish_r1_q2_long_payload {
447439
atLevel:2];
448440
payload = [payload stringByAppendingString:payload];
449441
}
450-
442+
[self testPublish:[[NSData alloc] init]
443+
onTopic:[NSString stringWithFormat:@"%@", TOPIC]
444+
retain:YES
445+
atLevel:2];
451446
[self shutdown];
452447
}
453448

@@ -607,7 +602,7 @@ - (void)testPublish_q2_x2 {
607602
*/
608603
- (void)testPublish_q2_dup_MQTT_3_3_1_1 {
609604
[self connect];
610-
self.timeoutValue= 90;
605+
self.timeoutValue = 90;
611606
self.blockQos2 = true;
612607
[self testPublish:[@(__FUNCTION__) dataUsingEncoding:NSUTF8StringEncoding]
613608
onTopic:[NSString stringWithFormat:@"%@/1%s", TOPIC, __FUNCTION__]

MQTTClient/MQTTClientTests/MQTTClientSubscriptionTests.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ @implementation MQTTClientSubscriptionTests
1919

2020
- (void)setUp {
2121
[super setUp];
22-
[MQTTLog setLogLevel:DDLogLevelVerbose];
22+
[MQTTLog setLogLevel:DDLogLevelInfo];
2323
}
2424

2525
- (void)tearDown {

0 commit comments

Comments
 (0)