Skip to content

Commit c5a9d02

Browse files
committed
Queue delete from RMQQueue or RMQChannel
[#119367857]
1 parent e2ec992 commit c5a9d02

10 files changed

+69
-0
lines changed

RMQClient/RMQAllocatedChannel.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,14 @@ - (RMQQueue *)queue:(NSString *)queueName {
110110
return [self queue:queueName options:RMQQueueDeclareNoOptions];
111111
}
112112

113+
- (void)queueDelete:(NSString *)queueName
114+
options:(RMQQueueDeleteOptions)options {
115+
[self.queues removeObjectForKey:queueName];
116+
[self.dispatcher sendSyncMethod:[[RMQQueueDelete alloc] initWithReserved1:[[RMQShort alloc] init:0]
117+
queue:[[RMQShortstr alloc] init:queueName]
118+
options:options]];
119+
}
120+
113121
- (void)queueBind:(NSString *)queueName
114122
exchange:(NSString *)exchangeName
115123
routingKey:(nonnull NSString *)routingKey {

RMQClient/RMQChannel.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121

2222
- (nonnull RMQQueue *)queue:(nonnull NSString *)queueName;
2323

24+
- (void)queueDelete:(nonnull NSString *)queueName
25+
options:(RMQQueueDeleteOptions)options;
26+
2427
- (void)queueBind:(nonnull NSString *)queueName
2528
exchange:(nonnull NSString *)exchangeName
2629
routingKey:(nonnull NSString *)routingKey;

RMQClient/RMQQueue.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
- (void)bind:(nonnull RMQExchange *)exchange routingKey:(nonnull NSString *)routingKey;
2020
- (void)bind:(nonnull RMQExchange *)exchange;
21+
- (void)delete:(RMQQueueDeleteOptions)options;
22+
- (void)delete;
2123
- (void)publish:(nonnull NSString *)message persistent:(BOOL)isPersistent;
2224
- (void)publish:(nonnull NSString *)message;
2325
- (void)pop:(RMQConsumer _Nonnull)handler;

RMQClient/RMQQueue.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,14 @@ - (void)bind:(RMQExchange *)exchange {
3838
[self bind:exchange routingKey:@""];
3939
}
4040

41+
- (void)delete:(RMQQueueDeleteOptions)options {
42+
[self.channel queueDelete:self.name options:options];
43+
}
44+
45+
- (void)delete {
46+
[self delete:RMQQueueDeleteNoOptions];
47+
}
48+
4149
- (void)publish:(NSString *)message persistent:(BOOL)isPersistent {
4250
[self.channel basicPublish:message routingKey:self.name exchange:@"" persistent:isPersistent];
4351
}

RMQClient/RMQUnallocatedChannel.m

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,11 @@ - (RMQQueue *)queue:(NSString *)queueName {
6464
return [self queue:queueName options:RMQQueueDeclareNoOptions];
6565
}
6666

67+
- (void)queueDelete:(NSString *)queueName
68+
options:(RMQQueueDeleteOptions)options {
69+
[self err];
70+
}
71+
6772
- (void)queueBind:(NSString *)queueName exchange:(NSString *)exchangeName routingKey:(nonnull NSString *)routingKey {
6873
[self err];
6974
}

RMQClientTests/ChannelSpy.swift

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
var lastReceivedQueueBindQueueName: String?
1313
var lastReceivedQueueBindExchange: String?
1414
var lastReceivedQueueBindRoutingKey: String?
15+
var lastReceivedQueueDeleteQueueName: String?
16+
var lastReceivedQueueDeleteOptions: RMQQueueDeleteOptions?
1517
var lastReceivedFrameset: RMQFrameset?
1618
var queues: [String: RMQQueue] = [:]
1719
var stubbedMessageCount: RMQLong = RMQLong(0)
@@ -84,6 +86,11 @@
8486
)
8587
}
8688

89+
func queueDelete(queueName: String, options: RMQQueueDeleteOptions) {
90+
lastReceivedQueueDeleteQueueName = queueName
91+
lastReceivedQueueDeleteOptions = options
92+
}
93+
8794
func queueBind(queueName: String, exchange exchangeName: String, routingKey: String) {
8895
lastReceivedQueueBindQueueName = queueName
8996
lastReceivedQueueBindExchange = exchangeName

RMQClientTests/MethodFixtures.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,10 @@ class MethodFixtures {
119119
return RMQQueueDeclareOk(queue: RMQShortstr(name), messageCount: RMQLong(0), consumerCount: RMQLong(0))
120120
}
121121

122+
static func queueDelete(name: String, options: RMQQueueDeleteOptions) -> RMQQueueDelete {
123+
return RMQQueueDelete(reserved1: RMQShort(0), queue: RMQShortstr(name), options: options)
124+
}
125+
122126
static func queueBind(name: String, exchangeName: String, routingKey: String) -> RMQQueueBind {
123127
return RMQQueueBind(reserved1: RMQShort(0), queue: RMQShortstr(name), exchange: RMQShortstr(exchangeName), routingKey: RMQShortstr(routingKey), options: [], arguments: RMQTable([:]))
124128
}

RMQClientTests/QueueDeclarationTest.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,22 @@ class QueueDeclarationTest: XCTestCase {
4646
XCTAssertEqual(RMQError.ChannelQueueNameCollision.rawValue, delegate.lastChannelError?.code)
4747
}
4848

49+
func testQueueDeleteSendsAQueueDelete() {
50+
let dispatcher = DispatcherSpy()
51+
let ch = RMQAllocatedChannel(123, contentBodySize: 100, dispatcher: dispatcher, commandQueue: FakeSerialQueue())
52+
ch.queueDelete("my queue", options: [.IfUnused])
53+
XCTAssertEqual(MethodFixtures.queueDelete("my queue", options: [.IfUnused]),
54+
dispatcher.lastSyncMethod as? RMQQueueDelete)
55+
}
56+
57+
func testQueueDeclareAfterDeleteSendsAFreshDeclare() {
58+
let dispatcher = DispatcherSpy()
59+
let ch = RMQAllocatedChannel(123, contentBodySize: 100, dispatcher: dispatcher, commandQueue: FakeSerialQueue())
60+
ch.queue("my queue")
61+
ch.queueDelete("my queue", options: [])
62+
dispatcher.lastSyncMethod = nil
63+
ch.queue("my queue")
64+
XCTAssertEqual(MethodFixtures.queueDeclare("my queue", options: []), dispatcher.lastSyncMethod as? RMQQueueDeclare)
65+
}
66+
4967
}

RMQClientTests/RMQQueueTest.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,4 +99,17 @@ class RMQQueueTest: XCTestCase {
9999
XCTAssertEqual("", channel.lastReceivedQueueBindRoutingKey)
100100
}
101101

102+
func testDeleteCallsDeleteOnChannel() {
103+
let channel = ChannelSpy(123)
104+
let queue = RMQQueue(name: "deletable", channel: channel)
105+
106+
queue.delete()
107+
XCTAssertEqual("deletable", channel.lastReceivedQueueDeleteQueueName)
108+
XCTAssertEqual([], channel.lastReceivedQueueDeleteOptions)
109+
110+
queue.delete([.IfEmpty])
111+
XCTAssertEqual("deletable", channel.lastReceivedQueueDeleteQueueName)
112+
XCTAssertEqual([.IfEmpty], channel.lastReceivedQueueDeleteOptions)
113+
}
114+
102115
}

RMQClientTests/RMQUnallocatedChannelTest.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class RMQUnallocatedChannelTest: XCTestCase {
2828
{ ch.headers("") },
2929
{ ch.nack(1) },
3030
{ ch.queue("foo") },
31+
{ ch.queueDelete("foo", options: []) },
3132
{ ch.queueBind("", exchange: "", routingKey: "") },
3233
{ ch.queueUnbind("", exchange: "", routingKey: "") },
3334
{ ch.reject(1) },

0 commit comments

Comments
 (0)