Skip to content

Commit 296126d

Browse files
committedJul 5, 2016
Breaking change: send/receive data, not strings.
Issue #46 [#124585511]
1 parent 4319b93 commit 296126d

20 files changed

+144
-131
lines changed
 

‎README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ Test-driven from Swift and implemented in Objective-C, to avoid burdening Object
2121
- [x] PKCS12 client certificates using the [TLS auth mechanism plugin](https://github.com/rabbitmq/rabbitmq-auth-mechanism-ssl)
2222
- [ ] [PKCS12 client certificates using chained CAs](https://github.com/rabbitmq/rabbitmq-objc-client/issues/74)
2323
- [ ] [Publisher confirmations](https://github.com/rabbitmq/rabbitmq-objc-client/issues/68)
24-
- [ ] [Publish and consume messages as data](https://github.com/rabbitmq/rabbitmq-objc-client/issues/46)
24+
- [x] [Publish and consume messages as data](https://github.com/rabbitmq/rabbitmq-objc-client/issues/46)
2525
- [ ] [Connection closure when broker doesn't send heartbeats fast enough](https://github.com/rabbitmq/rabbitmq-objc-client/issues/41)
2626
- [ ] [Customisable consumer hooks](https://github.com/rabbitmq/rabbitmq-objc-client/issues/71)
2727
- [ ] [basic.return support](https://github.com/rabbitmq/rabbitmq-objc-client/issues/72)
@@ -90,9 +90,9 @@ this list.
9090
```swift
9191
let q = ch.queue("myqueue")
9292
q.subscribe { m in
93-
print("Received: \(m.content)")
93+
print("Received: \(m.body)")
9494
}
95-
q.publish("foo")
95+
q.publish("foo".dataUsingEncoding(NSUTF8StringEncoding)!)
9696
```
9797

9898
1. Close the connection when done:

‎RMQClient/RMQAllocatedChannel.m

+16-20
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ - (void)basicCancel:(NSString *)consumerTag {
242242
options:RMQBasicCancelNoOptions]];
243243
}
244244

245-
- (void)basicPublish:(NSString *)message
245+
- (void)basicPublish:(NSData *)body
246246
routingKey:(NSString *)routingKey
247247
exchange:(NSString *)exchange
248248
properties:(NSArray<RMQValue *> *)properties
@@ -251,8 +251,7 @@ - (void)basicPublish:(NSString *)message
251251
exchange:[[RMQShortstr alloc] init:exchange]
252252
routingKey:[[RMQShortstr alloc] init:routingKey]
253253
options:options];
254-
NSData *contentBodyData = [message dataUsingEncoding:NSUTF8StringEncoding];
255-
RMQContentBody *contentBody = [[RMQContentBody alloc] initWithData:contentBodyData];
254+
RMQContentBody *contentBody = [[RMQContentBody alloc] initWithData:body];
256255

257256
NSData *bodyData = contentBody.amqEncoded;
258257

@@ -282,15 +281,13 @@ - (void)basicGet:(NSString *)queue
282281
options:options]
283282
completionHandler:^(RMQFrameset *frameset) {
284283
RMQBasicGetOk *getOk = (RMQBasicGetOk *)frameset.method;
285-
NSString *messageContent = [[NSString alloc] initWithData:frameset.contentData
286-
encoding:NSUTF8StringEncoding];
287-
RMQMessage *message = [[RMQMessage alloc] initWithContent:messageContent
288-
consumerTag:@""
289-
deliveryTag:@(getOk.deliveryTag.integerValue)
290-
redelivered:getOk.options & RMQBasicGetOkRedelivered
291-
exchangeName:getOk.exchange.stringValue
292-
routingKey:getOk.routingKey.stringValue
293-
properties:frameset.contentHeader.properties];
284+
RMQMessage *message = [[RMQMessage alloc] initWithBody:frameset.contentData
285+
consumerTag:@""
286+
deliveryTag:@(getOk.deliveryTag.integerValue)
287+
redelivered:getOk.options & RMQBasicGetOkRedelivered
288+
exchangeName:getOk.exchange.stringValue
289+
routingKey:getOk.routingKey.stringValue
290+
properties:frameset.contentHeader.properties];
294291
userCompletionHandler(message);
295292
}];
296293
}
@@ -439,16 +436,15 @@ - (void)handleConfirmation:(RMQFrameset *)frameset {
439436

440437
- (void)handleBasicDeliver:(RMQFrameset *)frameset {
441438
RMQBasicDeliver *deliver = (RMQBasicDeliver *)frameset.method;
442-
NSString *content = [[NSString alloc] initWithData:frameset.contentData encoding:NSUTF8StringEncoding];
443439
RMQConsumer *consumer = self.consumers[deliver.consumerTag.stringValue];
444440
if (consumer) {
445-
RMQMessage *message = [[RMQMessage alloc] initWithContent:content
446-
consumerTag:deliver.consumerTag.stringValue
447-
deliveryTag:@(deliver.deliveryTag.integerValue)
448-
redelivered:deliver.options & RMQBasicDeliverRedelivered
449-
exchangeName:deliver.exchange.stringValue
450-
routingKey:deliver.routingKey.stringValue
451-
properties:frameset.contentHeader.properties];
441+
RMQMessage *message = [[RMQMessage alloc] initWithBody:frameset.contentData
442+
consumerTag:deliver.consumerTag.stringValue
443+
deliveryTag:@(deliver.deliveryTag.integerValue)
444+
redelivered:deliver.options & RMQBasicDeliverRedelivered
445+
exchangeName:deliver.exchange.stringValue
446+
routingKey:deliver.routingKey.stringValue
447+
properties:frameset.contentHeader.properties];
452448
consumer.handler(message);
453449
}
454450
}

‎RMQClient/RMQChannel.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797

9898
- (void)basicCancel:(nonnull NSString *)consumerTag;
9999

100-
- (void)basicPublish:(nonnull NSString *)message
100+
- (void)basicPublish:(nonnull NSData *)body
101101
routingKey:(nonnull NSString *)routingKey
102102
exchange:(nonnull NSString *)exchange
103103
properties:(nonnull NSArray<RMQValue *> *)properties

‎RMQClient/RMQExchange.h

+5-5
Original file line numberDiff line numberDiff line change
@@ -72,19 +72,19 @@
7272
- (void)unbind:(RMQExchange *)source;
7373
- (void)delete:(RMQExchangeDeleteOptions)options;
7474
- (void)delete;
75-
- (void)publish:(NSString *)message
75+
- (void)publish:(NSData *)body
7676
routingKey:(NSString *)routingKey
7777
properties:(NSArray <RMQValue<RMQBasicValue> *> *)properties
7878
options:(RMQBasicPublishOptions)options;
79-
- (void)publish:(NSString *)message
79+
- (void)publish:(NSData *)body
8080
routingKey:(NSString *)key
8181
persistent:(BOOL)isPersistent
8282
options:(RMQBasicPublishOptions)options;
83-
- (void)publish:(NSString *)message
83+
- (void)publish:(NSData *)body
8484
routingKey:(NSString *)key
8585
persistent:(BOOL)isPersistent;
86-
- (void)publish:(NSString *)message
86+
- (void)publish:(NSData *)body
8787
routingKey:(NSString *)key;
88-
- (void)publish:(NSString *)message;
88+
- (void)publish:(NSData *)body;
8989

9090
@end

‎RMQClient/RMQExchange.m

+10-10
Original file line numberDiff line numberDiff line change
@@ -106,50 +106,50 @@ - (void)delete {
106106
[self delete:RMQExchangeDeleteNoOptions];
107107
}
108108

109-
- (void)publish:(NSString *)message
109+
- (void)publish:(NSData *)body
110110
routingKey:(NSString *)routingKey
111111
properties:(NSArray<RMQValue<RMQBasicValue> *> *)properties
112112
options:(RMQBasicPublishOptions)options {
113-
[self.channel basicPublish:message
113+
[self.channel basicPublish:body
114114
routingKey:routingKey
115115
exchange:self.name
116116
properties:properties
117117
options:options];
118118
}
119119

120-
- (void)publish:(NSString *)message
120+
- (void)publish:(NSData *)body
121121
routingKey:(NSString *)key
122122
persistent:(BOOL)isPersistent
123123
options:(RMQBasicPublishOptions)options {
124124
NSMutableArray *properties = [NSMutableArray new];
125125
if (isPersistent) {
126126
[properties addObject:[[RMQBasicDeliveryMode alloc] init:2]];
127127
}
128-
[self.channel basicPublish:message
128+
[self.channel basicPublish:body
129129
routingKey:key
130130
exchange:self.name
131131
properties:properties
132132
options:options];
133133
}
134134

135-
- (void)publish:(NSString *)message
135+
- (void)publish:(NSData *)body
136136
routingKey:(NSString *)key
137137
persistent:(BOOL)isPersistent {
138-
[self publish:message
138+
[self publish:body
139139
routingKey:key
140140
persistent:isPersistent
141141
options:RMQBasicPublishNoOptions];
142142
}
143143

144-
- (void)publish:(NSString *)message
144+
- (void)publish:(NSData *)body
145145
routingKey:(NSString *)key {
146-
[self publish:message
146+
[self publish:body
147147
routingKey:key
148148
persistent:NO];
149149
}
150150

151-
- (void)publish:(NSString *)message {
152-
[self publish:message
151+
- (void)publish:(NSData *)body {
152+
[self publish:body
153153
routingKey:@""];
154154
}
155155

‎RMQClient/RMQMessage.h

+8-8
Original file line numberDiff line numberDiff line change
@@ -53,21 +53,21 @@
5353
#import "RMQBasicProperties.h"
5454

5555
@interface RMQMessage : RMQValue
56-
@property (nonatomic, readonly) NSString *content;
56+
@property (nonatomic, readonly) NSData *body;
5757
@property (nonatomic, readonly) NSString *consumerTag;
5858
@property (nonatomic, readonly) NSNumber *deliveryTag;
5959
@property (nonatomic, readonly) BOOL isRedelivered;
6060
@property (nonatomic, readonly) NSString *exchangeName;
6161
@property (nonatomic, readonly) NSString *routingKey;
6262
@property (nonatomic, readonly) NSArray *properties;
6363

64-
- (instancetype)initWithContent:(NSString *)content
65-
consumerTag:(NSString *)consumerTag
66-
deliveryTag:(NSNumber *)deliveryTag
67-
redelivered:(BOOL)isRedelivered
68-
exchangeName:(NSString *)exchangeName
69-
routingKey:(NSString *)routingKey
70-
properties:(NSArray<RMQValue<RMQBasicValue> *> *)properties;
64+
- (instancetype)initWithBody:(NSData *)body
65+
consumerTag:(NSString *)consumerTag
66+
deliveryTag:(NSNumber *)deliveryTag
67+
redelivered:(BOOL)isRedelivered
68+
exchangeName:(NSString *)exchangeName
69+
routingKey:(NSString *)routingKey
70+
properties:(NSArray<RMQValue<RMQBasicValue> *> *)properties;
7171

7272
- (NSString *)appID;
7373
- (NSString *)contentType;

‎RMQClient/RMQMessage.m

+9-9
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
#import "RMQMessage.h"
5353

5454
@interface RMQMessage ()
55-
@property (nonatomic, readwrite) NSString *content;
55+
@property (nonatomic, readwrite) NSData *body;
5656
@property (nonatomic, readwrite) NSString *consumerTag;
5757
@property (nonatomic, readwrite) NSNumber *deliveryTag;
5858
@property (nonatomic, readwrite) BOOL isRedelivered;
@@ -63,16 +63,16 @@ @interface RMQMessage ()
6363

6464
@implementation RMQMessage
6565

66-
- (instancetype)initWithContent:(NSString *)content
67-
consumerTag:(NSString *)consumerTag
68-
deliveryTag:(NSNumber *)deliveryTag
69-
redelivered:(BOOL)isRedelivered
70-
exchangeName:(NSString *)exchangeName
71-
routingKey:(NSString *)routingKey
72-
properties:(NSArray<RMQValue<RMQBasicValue> *> *)properties {
66+
- (instancetype)initWithBody:(NSData *)body
67+
consumerTag:(NSString *)consumerTag
68+
deliveryTag:(NSNumber *)deliveryTag
69+
redelivered:(BOOL)isRedelivered
70+
exchangeName:(NSString *)exchangeName
71+
routingKey:(NSString *)routingKey
72+
properties:(NSArray<RMQValue<RMQBasicValue> *> *)properties {
7373
self = [super init];
7474
if (self) {
75-
self.content = content;
75+
self.body = body;
7676
self.consumerTag = consumerTag;
7777
self.deliveryTag = deliveryTag;
7878
self.isRedelivered = isRedelivered;

‎RMQClient/RMQQueue.h

+4-4
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,15 @@
7575
- (void)unbind:(RMQExchange *)exchange;
7676
- (void)delete:(RMQQueueDeleteOptions)options;
7777
- (void)delete;
78-
- (void)publish:(NSString *)message
78+
- (void)publish:(NSData *)body
7979
properties:(NSArray <RMQValue<RMQBasicValue> *> *)properties
8080
options:(RMQBasicPublishOptions)options;
81-
- (void)publish:(NSString *)message
81+
- (void)publish:(NSData *)body
8282
persistent:(BOOL)isPersistent
8383
options:(RMQBasicPublishOptions)options;
84-
- (void)publish:(NSString *)message
84+
- (void)publish:(NSData *)body
8585
persistent:(BOOL)isPersistent;
86-
- (void)publish:(NSString *)message;
86+
- (void)publish:(NSData *)body;
8787
- (void)pop:(RMQConsumerDeliveryHandler)handler;
8888
- (RMQConsumer *)subscribe:(RMQConsumerDeliveryHandler)handler;
8989
- (RMQConsumer *)subscribe:(RMQBasicConsumeOptions)options

‎RMQClient/RMQQueue.m

+8-8
Original file line numberDiff line numberDiff line change
@@ -104,37 +104,37 @@ - (void)delete {
104104
[self delete:RMQQueueDeleteNoOptions];
105105
}
106106

107-
- (void)publish:(NSString *)message
107+
- (void)publish:(NSData *)data
108108
properties:(NSArray<RMQValue<RMQBasicValue> *> *)properties
109109
options:(RMQBasicPublishOptions)options {
110-
[self.channel basicPublish:message
110+
[self.channel basicPublish:data
111111
routingKey:self.name
112112
exchange:@""
113113
properties:properties
114114
options:options];
115115
}
116116

117-
- (void)publish:(NSString *)message
117+
- (void)publish:(NSData *)body
118118
persistent:(BOOL)isPersistent
119119
options:(RMQBasicPublishOptions)options {
120120
NSMutableArray *properties = [NSMutableArray new];
121121
if (isPersistent) {
122122
[properties addObject:[[RMQBasicDeliveryMode alloc] init:2]];
123123
}
124-
[self.channel basicPublish:message
124+
[self.channel basicPublish:body
125125
routingKey:self.name
126126
exchange:@""
127127
properties:properties
128128
options:options];
129129
}
130130

131-
- (void)publish:(NSString *)message
131+
- (void)publish:(NSData *)body
132132
persistent:(BOOL)isPersistent {
133-
[self publish:message persistent:isPersistent options:RMQBasicPublishNoOptions];
133+
[self publish:body persistent:isPersistent options:RMQBasicPublishNoOptions];
134134
}
135135

136-
- (void)publish:(NSString *)message {
137-
[self publish:message persistent:NO];
136+
- (void)publish:(NSData *)body {
137+
[self publish:body persistent:NO];
138138
}
139139

140140
- (void)pop:(RMQConsumerDeliveryHandler)handler {

‎RMQClientIntegrationTests/ConnectionRecoveryIntegrationTest.swift

+27-17
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
// Version 1.1 (the "License"); you may not use this file except in
2727
// compliance with the License. You may obtain a copy of the License at
2828
// https://www.mozilla.org/MPL/
29-
//
29+
//
3030
// Software distributed under the License is distributed on an "AS IS"
3131
// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
3232
// License for the specific language governing rights and limitations
@@ -89,7 +89,7 @@ class ConnectionRecoveryIntegrationTest: XCTestCase {
8989

9090
ch.confirmSelect()
9191

92-
ex1.publish("before close")
92+
ex1.publish("before close".dataUsingEncoding(NSUTF8StringEncoding))
9393
XCTAssertEqual(0, dispatch_semaphore_wait(consumerSemaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout)),
9494
"Timed out waiting for message")
9595

@@ -98,9 +98,9 @@ class ConnectionRecoveryIntegrationTest: XCTestCase {
9898
XCTAssert(TestHelper.pollUntil { delegate.recoveredConnection != nil },
9999
"Didn't finish recovery")
100100

101-
q.publish("after close 1")
101+
q.publish("after close 1".dataUsingEncoding(NSUTF8StringEncoding))
102102
dispatch_semaphore_wait(consumerSemaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout))
103-
ex1.publish("after close 2")
103+
ex1.publish("after close 2".dataUsingEncoding(NSUTF8StringEncoding))
104104
dispatch_semaphore_wait(consumerSemaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout))
105105

106106
var acks: Set<NSNumber>?
@@ -111,18 +111,20 @@ class ConnectionRecoveryIntegrationTest: XCTestCase {
111111
dispatch_semaphore_signal(confirmSemaphore)
112112
}
113113

114-
XCTAssertEqual(["before close", "after close 1", "after close 2"], messages.map { $0.content })
114+
XCTAssertEqual("before close".dataUsingEncoding(NSUTF8StringEncoding), messages[0].body)
115+
XCTAssertEqual("after close 1".dataUsingEncoding(NSUTF8StringEncoding), messages[1].body)
116+
XCTAssertEqual("after close 2".dataUsingEncoding(NSUTF8StringEncoding), messages[2].body)
115117

116118
XCTAssertEqual(0, dispatch_semaphore_wait(confirmSemaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout)))
117119
XCTAssert(acks!.union(nacks!).isSupersetOf([2, 3]),
118120
"Didn't receive acks for publications post-recovery (pre-recovery acks can be lost)")
119121

120122
// test recovery of queue arguments - in this case, x-max-length
121123
consumer.cancel()
122-
q.publish("4")
123-
q.publish("5")
124-
q.publish("6")
125-
q.publish("7")
124+
q.publish("4".dataUsingEncoding(NSUTF8StringEncoding))
125+
q.publish("5".dataUsingEncoding(NSUTF8StringEncoding))
126+
q.publish("6".dataUsingEncoding(NSUTF8StringEncoding))
127+
q.publish("7".dataUsingEncoding(NSUTF8StringEncoding))
126128

127129
var messagesPostCancel: [RMQMessage] = []
128130
q.subscribe { m in
@@ -133,7 +135,9 @@ class ConnectionRecoveryIntegrationTest: XCTestCase {
133135
for _ in 5...7 {
134136
XCTAssertEqual(0, dispatch_semaphore_wait(consumerSemaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout)))
135137
}
136-
XCTAssertEqual(["5", "6", "7"], messagesPostCancel.map { $0.content })
138+
XCTAssertEqual("5".dataUsingEncoding(NSUTF8StringEncoding), messagesPostCancel[0].body)
139+
XCTAssertEqual("6".dataUsingEncoding(NSUTF8StringEncoding), messagesPostCancel[1].body)
140+
XCTAssertEqual("7".dataUsingEncoding(NSUTF8StringEncoding), messagesPostCancel[2].body)
137141
}
138142

139143
func testReenablesConsumersOnEachRecoveryFromConnectionClose() {
@@ -167,7 +171,7 @@ class ConnectionRecoveryIntegrationTest: XCTestCase {
167171
dispatch_semaphore_signal(semaphore)
168172
}
169173

170-
ex.publish("before close")
174+
ex.publish("before close".dataUsingEncoding(NSUTF8StringEncoding))
171175
XCTAssertEqual(0, dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout)),
172176
"Timed out waiting for message")
173177

@@ -177,24 +181,30 @@ class ConnectionRecoveryIntegrationTest: XCTestCase {
177181
"Didn't finish recovery the first time")
178182
delegate.recoveredConnection = nil
179183

180-
q.publish("after close 1")
184+
q.publish("after close 1".dataUsingEncoding(NSUTF8StringEncoding))
181185
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout))
182-
ex.publish("after close 2")
186+
ex.publish("after close 2".dataUsingEncoding(NSUTF8StringEncoding))
183187
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout))
184188

185-
XCTAssertEqual(["before close", "after close 1", "after close 2"], messages.map { $0.content })
189+
XCTAssertEqual("before close".dataUsingEncoding(NSUTF8StringEncoding), messages[0].body)
190+
XCTAssertEqual("after close 1".dataUsingEncoding(NSUTF8StringEncoding), messages[1].body)
191+
XCTAssertEqual("after close 2".dataUsingEncoding(NSUTF8StringEncoding), messages[2].body)
186192

187193
try! closeAllConnections()
188194

189195
XCTAssert(TestHelper.pollUntil { delegate.recoveredConnection != nil },
190196
"Didn't finish recovery the second time")
191197

192-
q.publish("after close 3")
198+
q.publish("after close 3".dataUsingEncoding(NSUTF8StringEncoding))
193199
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout))
194-
ex.publish("after close 4")
200+
ex.publish("after close 4".dataUsingEncoding(NSUTF8StringEncoding))
195201
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(semaphoreTimeout))
196202

197-
XCTAssertEqual(["before close", "after close 1", "after close 2", "after close 3", "after close 4"], messages.map { $0.content })
203+
XCTAssertEqual("before close".dataUsingEncoding(NSUTF8StringEncoding), messages[0].body)
204+
XCTAssertEqual("after close 1".dataUsingEncoding(NSUTF8StringEncoding), messages[1].body)
205+
XCTAssertEqual("after close 2".dataUsingEncoding(NSUTF8StringEncoding), messages[2].body)
206+
XCTAssertEqual("after close 3".dataUsingEncoding(NSUTF8StringEncoding), messages[3].body)
207+
XCTAssertEqual("after close 4".dataUsingEncoding(NSUTF8StringEncoding), messages[4].body)
198208
}
199209

200210
private func connections() -> [RMQHTTPConnection] {

‎RMQClientIntegrationTests/IntegrationTests.swift

+13-9
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,13 @@ class IntegrationTests: XCTestCase {
8888
dst.bind(src)
8989
q.bind(dst)
9090

91-
src.publish(messageContent)
91+
let body = messageContent.dataUsingEncoding(NSUTF8StringEncoding)!
92+
93+
src.publish(body)
9294

9395
let semaphore = dispatch_semaphore_create(0)
9496
let expected = RMQMessage(
95-
content: messageContent,
97+
body: body,
9698
consumerTag: "",
9799
deliveryTag: 1,
98100
redelivered: false,
@@ -146,14 +148,16 @@ class IntegrationTests: XCTestCase {
146148
dispatch_semaphore_signal(semaphore)
147149
}
148150

149-
q.publish("my message")
151+
let body = "my message".dataUsingEncoding(NSUTF8StringEncoding)!
152+
153+
q.publish(body)
150154

151155
XCTAssertEqual(0,
152156
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(10)),
153157
"Timed out waiting for message")
154158

155159
XCTAssertEqual(1, delivered!.deliveryTag)
156-
XCTAssertEqual("my message", delivered!.content)
160+
XCTAssertEqual(body, delivered!.body)
157161
}
158162

159163
func testMessageProperties() {
@@ -202,7 +206,7 @@ class IntegrationTests: XCTestCase {
202206
RMQBasicCorrelationId("r-1"),
203207
RMQBasicMessageId("m-1"),
204208
]
205-
q.publish("a message", properties: props, options: [])
209+
q.publish("a message".dataUsingEncoding(NSUTF8StringEncoding), properties: props, options: [])
206210

207211
XCTAssertEqual(0,
208212
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(10)),
@@ -249,7 +253,7 @@ class IntegrationTests: XCTestCase {
249253
}
250254
}
251255

252-
ch.defaultExchange().publish("my message", routingKey: q.name)
256+
ch.defaultExchange().publish("my message".dataUsingEncoding(NSUTF8StringEncoding), routingKey: q.name)
253257

254258
XCTAssertEqual(0,
255259
dispatch_semaphore_wait(semaphore, TestHelper.dispatchTimeFromNow(10)),
@@ -300,7 +304,7 @@ class IntegrationTests: XCTestCase {
300304
let producingQueue = producingChannel.queue(consumingQueue.name, options: [.AutoDelete, .Exclusive])
301305

302306
for _ in 1...messageCount {
303-
producingQueue.publish("hello")
307+
producingQueue.publish("hello".dataUsingEncoding(NSUTF8StringEncoding))
304308
}
305309

306310
XCTAssertEqual(0,
@@ -346,7 +350,7 @@ class IntegrationTests: XCTestCase {
346350
}
347351

348352
for _ in 1...messageCount {
349-
producingQueue.publish("hello")
353+
producingQueue.publish("hello".dataUsingEncoding(NSUTF8StringEncoding))
350354
}
351355

352356
XCTAssertEqual(
@@ -393,6 +397,6 @@ class IntegrationTests: XCTestCase {
393397
}
394398

395399
private func causeServerChannelClose(ch: RMQChannel) {
396-
ch.basicPublish("", routingKey: "a route that can't be found", exchange: "a non-existent exchange", properties: [], options: [])
400+
ch.basicPublish("".dataUsingEncoding(NSUTF8StringEncoding)!, routingKey: "a route that can't be found", exchange: "a non-existent exchange", properties: [], options: [])
397401
}
398402
}

‎RMQClientIntegrationTests/PublisherConfirmationIntegrationTest.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ class PublisherConfirmationIntegrationTest: XCTestCase {
6464

6565
let q = ch.queue("", options: [.AutoDelete, .Exclusive])
6666

67-
q.publish("message a")
68-
q.publish("message b")
67+
q.publish("message a".dataUsingEncoding(NSUTF8StringEncoding))
68+
q.publish("message b".dataUsingEncoding(NSUTF8StringEncoding))
6969

7070
var acked: Set<NSNumber> = []
7171
var nacked: Set<NSNumber> = []

‎RMQClientTests/ChannelSpy.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
var lastReceivedBasicGetOptions: RMQBasicGetOptions?
6262
var lastReceivedBasicGetCompletionHandler: RMQConsumerDeliveryHandler?
6363

64-
var lastReceivedBasicPublishMessage: String?
64+
var lastReceivedBasicPublishMessage: NSData?
6565
var lastReceivedBasicPublishRoutingKey: String?
6666
var lastReceivedBasicPublishExchange: String?
6767
var lastReceivedBasicPublishProperties: Array<RMQValue>?
@@ -217,8 +217,8 @@
217217
lastReceivedBasicCancelConsumerTag = consumerTag
218218
}
219219

220-
func basicPublish(message: String, routingKey: String, exchange: String, properties: [RMQValue], options: RMQBasicPublishOptions) {
221-
lastReceivedBasicPublishMessage = message
220+
func basicPublish(body: NSData, routingKey: String, exchange: String, properties: [RMQValue], options: RMQBasicPublishOptions) {
221+
lastReceivedBasicPublishMessage = body
222222
lastReceivedBasicPublishRoutingKey = routingKey
223223
lastReceivedBasicPublishExchange = exchange
224224
lastReceivedBasicPublishProperties = properties

‎RMQClientTests/ConsumeTest.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ class ConsumeTest: XCTestCase {
9090
exchange: "my-exchange",
9191
options: [.Redelivered]
9292
)
93-
let expectedMessage = RMQMessage(content: "Consumed!",
93+
let expectedMessage = RMQMessage(body: "Consumed!".dataUsingEncoding(NSUTF8StringEncoding),
9494
consumerTag: "tag",
9595
deliveryTag: 456,
9696
redelivered: true,

‎RMQClientTests/PublisherConfirmationTest.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ class PublisherConfirmationTest: XCTestCase {
9292
let ch = ChannelHelper.makeChannel(1, confirmations: confirmations)
9393

9494
XCTAssertEqual(0, confirmations.publicationCount)
95-
ch.basicPublish("hi there", routingKey: "", exchange: "", properties: [], options: [])
95+
ch.basicPublish("hi there".dataUsingEncoding(NSUTF8StringEncoding)!, routingKey: "", exchange: "", properties: [], options: [])
9696
XCTAssertEqual(1, confirmations.publicationCount)
9797
}
9898

‎RMQClientTests/RMQAllocatedChannelTest.swift

+8-8
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ class RMQAllocatedChannelTest: XCTestCase {
189189
contentBodies: [RMQContentBody(data: "hello".dataUsingEncoding(NSUTF8StringEncoding)!)]
190190
)
191191
let expectedMessage = RMQMessage(
192-
content: "hello",
192+
body: "hello".dataUsingEncoding(NSUTF8StringEncoding),
193193
consumerTag: "",
194194
deliveryTag: 1,
195195
redelivered: true,
@@ -224,8 +224,8 @@ class RMQAllocatedChannelTest: XCTestCase {
224224
let deliverHeader2 = RMQContentHeader(classID: deliverMethod2.classID(), bodySize: 123, properties: [])
225225
let deliverBody2 = RMQContentBody(data: "A message for consumer 2".dataUsingEncoding(NSUTF8StringEncoding)!)
226226
let deliverFrameset2 = RMQFrameset(channelNumber: 999, method: deliverMethod2, contentHeader: deliverHeader2, contentBodies: [deliverBody2])
227-
let expectedMessage1 = RMQMessage(content: "A message for consumer 1", consumerTag: "tag1", deliveryTag: 1, redelivered: false, exchangeName: "", routingKey: "", properties: [])
228-
let expectedMessage2 = RMQMessage(content: "A message for consumer 2", consumerTag: "tag2", deliveryTag: 1, redelivered: false, exchangeName: "", routingKey: "", properties: [])
227+
let expectedMessage1 = RMQMessage(body: "A message for consumer 1".dataUsingEncoding(NSUTF8StringEncoding), consumerTag: "tag1", deliveryTag: 1, redelivered: false, exchangeName: "", routingKey: "", properties: [])
228+
let expectedMessage2 = RMQMessage(body: "A message for consumer 2".dataUsingEncoding(NSUTF8StringEncoding), consumerTag: "tag2", deliveryTag: 1, redelivered: false, exchangeName: "", routingKey: "", properties: [])
229229

230230
ch.activateWithDelegate(nil)
231231

@@ -256,15 +256,15 @@ class RMQAllocatedChannelTest: XCTestCase {
256256
func testBasicPublishSendsAsyncFrameset() {
257257
let dispatcher = DispatcherSpy()
258258
let ch = ChannelHelper.makeChannel(999, contentBodySize: 4, dispatcher: dispatcher)
259-
let message = "my great message yo"
259+
let message = "my great message yo".dataUsingEncoding(NSUTF8StringEncoding)!
260260
let notPersistent = RMQBasicDeliveryMode(1)
261261
let customContentType = RMQBasicContentType("my/content-type")
262262
let priorityZero = RMQBasicPriority(0)
263263

264264
let expectedMethod = MethodFixtures.basicPublish("my.q", exchange: "", options: [.Mandatory])
265265
let expectedHeader = RMQContentHeader(
266266
classID: 60,
267-
bodySize: message.dataUsingEncoding(NSUTF8StringEncoding)!.length,
267+
bodySize: message.length,
268268
properties: [notPersistent, customContentType, priorityZero]
269269
)
270270
let expectedBodies = [
@@ -295,7 +295,7 @@ class RMQAllocatedChannelTest: XCTestCase {
295295
let ch = ChannelHelper.makeChannel(999, contentBodySize: 4, dispatcher: dispatcher)
296296

297297
let props: [RMQValue] = [RMQBasicCorrelationId("my-correlation-id")]
298-
ch.basicPublish("", routingKey: "", exchange: "", properties: props, options: [])
298+
ch.basicPublish(NSData(), routingKey: "", exchange: "", properties: props, options: [])
299299

300300
let expectedProperties: Set<RMQValue> = Set(RMQBasicProperties.defaultProperties()).union(props)
301301
let header = dispatcher.lastAsyncFrameset!.contentHeader
@@ -306,9 +306,9 @@ class RMQAllocatedChannelTest: XCTestCase {
306306
func testPublishWhenContentLengthIsMultipleOfFrameMax() {
307307
let dispatcher = DispatcherSpy()
308308
let ch = ChannelHelper.makeChannel(999, contentBodySize: 4, dispatcher: dispatcher)
309-
let messageContent = "12345678"
309+
let messageContent = "12345678".dataUsingEncoding(NSUTF8StringEncoding)!
310310
let expectedMethod = MethodFixtures.basicPublish("my.q", exchange: "", options: [])
311-
let expectedBodyData = messageContent.dataUsingEncoding(NSUTF8StringEncoding)!
311+
let expectedBodyData = messageContent
312312
let expectedHeader = RMQContentHeader(
313313
classID: 60,
314314
bodySize: expectedBodyData.length,

‎RMQClientTests/RMQExchangeTest.swift

+11-9
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,14 @@ import XCTest
5353

5454
class RMQExchangeTest: XCTestCase {
5555

56+
let body = "foo".dataUsingEncoding(NSUTF8StringEncoding)!
57+
5658
func testPublishCallsPublishOnChannel() {
5759
let ch = ChannelSpy(1)
5860
let ex = RMQExchange(name: "", type: "direct", options: [], channel: ch)
59-
ex.publish("foo", routingKey: "my.q")
61+
ex.publish(body, routingKey: "my.q")
6062

61-
XCTAssertEqual("foo", ch.lastReceivedBasicPublishMessage)
63+
XCTAssertEqual(body, ch.lastReceivedBasicPublishMessage)
6264
XCTAssertEqual("my.q", ch.lastReceivedBasicPublishRoutingKey)
6365
XCTAssertEqual("", ch.lastReceivedBasicPublishExchange)
6466
XCTAssertEqual([], ch.lastReceivedBasicPublishProperties!)
@@ -68,17 +70,17 @@ class RMQExchangeTest: XCTestCase {
6870
func testPublishWithoutRoutingKeyUsesEmptyString() {
6971
let ch = ChannelSpy(1)
7072
let ex = RMQExchange(name: "", type: "direct", options: [], channel: ch)
71-
ex.publish("foo")
73+
ex.publish(body)
7274

7375
XCTAssertEqual("", ch.lastReceivedBasicPublishRoutingKey)
7476
}
7577

7678
func testPublishWithPersistence() {
7779
let ch = ChannelSpy(1)
7880
let ex = RMQExchange(name: "some-ex", type: "direct", options: [], channel: ch)
79-
ex.publish("foo", routingKey: "my.q", persistent: true)
81+
ex.publish(body, routingKey: "my.q", persistent: true)
8082

81-
XCTAssertEqual("foo", ch.lastReceivedBasicPublishMessage)
83+
XCTAssertEqual(body, ch.lastReceivedBasicPublishMessage)
8284
XCTAssertEqual("my.q", ch.lastReceivedBasicPublishRoutingKey)
8385
XCTAssertEqual("some-ex", ch.lastReceivedBasicPublishExchange)
8486
XCTAssertEqual([RMQBasicDeliveryMode(2)], ch.lastReceivedBasicPublishProperties!)
@@ -106,12 +108,12 @@ class RMQExchangeTest: XCTestCase {
106108
BasicPropertyFixtures.exhaustiveHeaders()
107109
]
108110

109-
ex.publish("{\"a\": \"message\"}",
111+
ex.publish("{\"a\": \"message\"}".dataUsingEncoding(NSUTF8StringEncoding),
110112
routingKey: "some.queue",
111113
properties: properties,
112114
options: [.Mandatory])
113115

114-
XCTAssertEqual("{\"a\": \"message\"}", channel.lastReceivedBasicPublishMessage)
116+
XCTAssertEqual("{\"a\": \"message\"}".dataUsingEncoding(NSUTF8StringEncoding), channel.lastReceivedBasicPublishMessage)
115117
XCTAssertEqual("some.queue", channel.lastReceivedBasicPublishRoutingKey)
116118
XCTAssertEqual("some-ex", channel.lastReceivedBasicPublishExchange)
117119
XCTAssertEqual([.Mandatory], channel.lastReceivedBasicPublishOptions)
@@ -121,9 +123,9 @@ class RMQExchangeTest: XCTestCase {
121123
func testPublishWithOptions() {
122124
let ch = ChannelSpy(1)
123125
let ex = RMQExchange(name: "some-ex", type: "direct", options: [], channel: ch)
124-
ex.publish("foo", routingKey: "my.q", persistent: false, options: [.Mandatory])
126+
ex.publish(body, routingKey: "my.q", persistent: false, options: [.Mandatory])
125127

126-
XCTAssertEqual("foo", ch.lastReceivedBasicPublishMessage)
128+
XCTAssertEqual(body, ch.lastReceivedBasicPublishMessage)
127129
XCTAssertEqual("my.q", ch.lastReceivedBasicPublishRoutingKey)
128130
XCTAssertEqual("some-ex", ch.lastReceivedBasicPublishExchange)
129131
XCTAssertEqual([], ch.lastReceivedBasicPublishProperties!)

‎RMQClientTests/RMQMessageTest.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class RMQMessageTest: XCTestCase {
6666
props.append(RMQBasicReplyTo("my.sender"))
6767
props.append(RMQBasicTimestamp(date))
6868

69-
let m = RMQMessage(content: "my message",
69+
let m = RMQMessage(body: "my message".dataUsingEncoding(NSUTF8StringEncoding),
7070
consumerTag: "ctag",
7171
deliveryTag: 1,
7272
redelivered: false,

‎RMQClientTests/RMQQueueTest.swift

+12-11
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,14 @@
5252
import XCTest
5353

5454
class RMQQueueTest: XCTestCase {
55+
let body = "a message".dataUsingEncoding(NSUTF8StringEncoding)!
5556
func testPublishSendsBasicPublishToChannel() {
5657
let channel = ChannelSpy(42)
5758
let queue = QueueHelper.makeQueue(channel, name: "some.queue")
5859

59-
queue.publish("a message")
60+
queue.publish(body)
6061

61-
XCTAssertEqual("a message", channel.lastReceivedBasicPublishMessage)
62+
XCTAssertEqual(body, channel.lastReceivedBasicPublishMessage)
6263
XCTAssertEqual("some.queue", channel.lastReceivedBasicPublishRoutingKey)
6364
XCTAssertEqual("", channel.lastReceivedBasicPublishExchange)
6465
XCTAssertEqual([], channel.lastReceivedBasicPublishProperties!)
@@ -69,9 +70,9 @@ class RMQQueueTest: XCTestCase {
6970
let channel = ChannelSpy(42)
7071
let queue = QueueHelper.makeQueue(channel, name: "some.queue")
7172

72-
queue.publish("a message", persistent: true)
73+
queue.publish(body, persistent: true)
7374

74-
XCTAssertEqual("a message", channel.lastReceivedBasicPublishMessage)
75+
XCTAssertEqual(body, channel.lastReceivedBasicPublishMessage)
7576
XCTAssertEqual("some.queue", channel.lastReceivedBasicPublishRoutingKey)
7677
XCTAssertEqual("", channel.lastReceivedBasicPublishExchange)
7778
XCTAssertEqual([RMQBasicDeliveryMode(2)], channel.lastReceivedBasicPublishProperties!)
@@ -99,11 +100,11 @@ class RMQQueueTest: XCTestCase {
99100
BasicPropertyFixtures.exhaustiveHeaders()
100101
]
101102

102-
queue.publish("{\"a\": \"message\"}",
103+
queue.publish("{\"a\": \"message\"}".dataUsingEncoding(NSUTF8StringEncoding),
103104
properties: properties,
104105
options: [.Mandatory])
105106

106-
XCTAssertEqual("{\"a\": \"message\"}", channel.lastReceivedBasicPublishMessage)
107+
XCTAssertEqual("{\"a\": \"message\"}".dataUsingEncoding(NSUTF8StringEncoding), channel.lastReceivedBasicPublishMessage)
107108
XCTAssertEqual("some.queue", channel.lastReceivedBasicPublishRoutingKey)
108109
XCTAssertEqual("", channel.lastReceivedBasicPublishExchange)
109110
XCTAssertEqual([.Mandatory], channel.lastReceivedBasicPublishOptions)
@@ -114,17 +115,17 @@ class RMQQueueTest: XCTestCase {
114115
let channel = ChannelSpy(42)
115116
let queue = QueueHelper.makeQueue(channel, name: "some.queue")
116117

117-
queue.publish("a message", persistent: false, options: [.Mandatory])
118+
queue.publish(body, persistent: false, options: [.Mandatory])
118119

119-
XCTAssertEqual("a message", channel.lastReceivedBasicPublishMessage)
120+
XCTAssertEqual(body, channel.lastReceivedBasicPublishMessage)
120121
XCTAssertEqual("some.queue", channel.lastReceivedBasicPublishRoutingKey)
121122
XCTAssertEqual("", channel.lastReceivedBasicPublishExchange)
122123
XCTAssertEqual([], channel.lastReceivedBasicPublishProperties!)
123124
XCTAssertEqual([.Mandatory], channel.lastReceivedBasicPublishOptions)
124125
}
125126

126127
func testPopDelegatesToChannelBasicGet() {
127-
let stubbedMessage = RMQMessage(content: "hi there", consumerTag: "", deliveryTag: 123, redelivered: false, exchangeName: "", routingKey: "", properties: [])
128+
let stubbedMessage = RMQMessage(body: body, consumerTag: "", deliveryTag: 123, redelivered: false, exchangeName: "", routingKey: "", properties: [])
128129
let channel = ChannelSpy(42)
129130
let queue = QueueHelper.makeQueue(channel, name: "great.queue")
130131

@@ -149,7 +150,7 @@ class RMQQueueTest: XCTestCase {
149150
handlerCalled = true
150151
}
151152

152-
let message = RMQMessage(content: "I have default options!", consumerTag: "", deliveryTag: 123, redelivered: false, exchangeName: "", routingKey: "", properties: [])
153+
let message = RMQMessage(body: "I have default options!".dataUsingEncoding(NSUTF8StringEncoding), consumerTag: "", deliveryTag: 123, redelivered: false, exchangeName: "", routingKey: "", properties: [])
153154
channel.lastReceivedBasicConsumeBlock!(message)
154155

155156
XCTAssert(handlerCalled)
@@ -165,7 +166,7 @@ class RMQQueueTest: XCTestCase {
165166
handlerCalled = true
166167
}
167168

168-
let message = RMQMessage(content: "I have custom options!", consumerTag: "", deliveryTag: 123, redelivered: false, exchangeName: "", routingKey: "", properties: [])
169+
let message = RMQMessage(body: "I have custom options!".dataUsingEncoding(NSUTF8StringEncoding), consumerTag: "", deliveryTag: 123, redelivered: false, exchangeName: "", routingKey: "", properties: [])
169170
channel.lastReceivedBasicConsumeBlock!(message)
170171

171172
XCTAssert(handlerCalled)

‎RMQClientTests/RMQUnallocatedChannelTest.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ class RMQUnallocatedChannelTest: XCTestCase {
6969
{ ch.afterConfirmed { _ in } },
7070
{ ch.basicConsume("foo", options: []) { _ in } },
7171
{ ch.basicGet("foo", options: []) { _ in } },
72-
{ ch.basicPublish("hi", routingKey: "yo", exchange: "hmm", properties: [], options: []) },
72+
{ ch.basicPublish("hi".dataUsingEncoding(NSUTF8StringEncoding)!, routingKey: "yo", exchange: "hmm", properties: [], options: []) },
7373
{ ch.basicQos(2, global: false) },
7474
{ ch.blockingWaitOn(RMQConnectionStart.self) },
7575
{ ch.confirmSelect() },

0 commit comments

Comments
 (0)
Please sign in to comment.