From 1c8f3a44d678cf942e90f40c066b72f0f3bd3b43 Mon Sep 17 00:00:00 2001 From: shashank mehra Date: Mon, 29 Jan 2024 19:49:53 +0530 Subject: [PATCH 1/3] Add support for if-unused and if-empty for delete_queue --- lib/rabbitmq/http/client.rb | 8 ++++++-- spec/integration/api_endpoints_spec.rb | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/lib/rabbitmq/http/client.rb b/lib/rabbitmq/http/client.rb index e6875d0..0c7f854 100644 --- a/lib/rabbitmq/http/client.rb +++ b/lib/rabbitmq/http/client.rb @@ -177,8 +177,12 @@ def declare_queue(vhost, name, attributes) decode_resource(response) end - def delete_queue(vhost, name) - decode_resource(@connection.delete("queues/#{encode_uri_path_segment(vhost)}/#{encode_uri_path_segment(name)}")) + def delete_queue(vhost, name, if_unused = false, if_empty = false) + response = @connection.delete("queues/#{encode_uri_path_segment(vhost)}/#{encode_uri_path_segment(name)}") do |req| + req.params["if-unused"] = true if if_unused + req.params["if-empty"] = true if if_empty + end + decode_resource(response) end def list_queue_bindings(vhost, queue, query = {}) diff --git a/spec/integration/api_endpoints_spec.rb b/spec/integration/api_endpoints_spec.rb index f36fa40..40cf84c 100644 --- a/spec/integration/api_endpoints_spec.rb +++ b/spec/integration/api_endpoints_spec.rb @@ -506,6 +506,32 @@ def await_event_propagation q = @channel.queue(queue_name, durable: false) subject.delete_queue("/", queue_name) end + + it "doesn't delete non-empty queue if if-empty is set" do + q = @channel.queue(queue_name, durable: false) + q.publish("hello") + expect do + subject.delete_queue("/", queue_name, false, true) + end.to raise_error(Faraday::ClientError) + + subject.purge_queue("/", q.name) + subject.delete_queue("/", queue_name, false, true) + end + + it "doesn't delete used queue if if-unused is set" do + q = @channel.queue(queue_name, durable: false) + # Simulate the queue being used by creating a consumer + consumer = q.subscribe do |_delivery_info, _properties, _body| + # consumer block + end + + expect do + subject.delete_queue("/", queue_name, true, false) + end.to raise_error(Faraday::ClientError) + + consumer.cancel + subject.delete_queue("/", queue_name, false, true) + end end describe "GET /api/queues/:vhost/:name/bindings" do From d45a7dd96bc02ecdf045fdd12d77f07ad66e12bf Mon Sep 17 00:00:00 2001 From: shashank mehra Date: Mon, 29 Jan 2024 20:05:53 +0530 Subject: [PATCH 2/3] Clean up test for delete_queue. Add assertion for queue deletion. Fix a copy paste error. --- spec/integration/api_endpoints_spec.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/spec/integration/api_endpoints_spec.rb b/spec/integration/api_endpoints_spec.rb index 40cf84c..dc86d81 100644 --- a/spec/integration/api_endpoints_spec.rb +++ b/spec/integration/api_endpoints_spec.rb @@ -505,6 +505,7 @@ def await_event_propagation it "deletes a queue" do q = @channel.queue(queue_name, durable: false) subject.delete_queue("/", queue_name) + expect { subject.queue_info("/", queue_name) }.to raise_error(Faraday::ResourceNotFound) end it "doesn't delete non-empty queue if if-empty is set" do @@ -516,21 +517,20 @@ def await_event_propagation subject.purge_queue("/", q.name) subject.delete_queue("/", queue_name, false, true) + expect { subject.queue_info("/", queue_name) }.to raise_error(Faraday::ResourceNotFound) end it "doesn't delete used queue if if-unused is set" do q = @channel.queue(queue_name, durable: false) - # Simulate the queue being used by creating a consumer - consumer = q.subscribe do |_delivery_info, _properties, _body| - # consumer block - end + consumer = q.subscribe expect do subject.delete_queue("/", queue_name, true, false) end.to raise_error(Faraday::ClientError) consumer.cancel - subject.delete_queue("/", queue_name, false, true) + subject.delete_queue("/", queue_name, true, false) + expect { subject.queue_info("/", queue_name) }.to raise_error(Faraday::ResourceNotFound) end end From 29ecbce897c3fee4601e2207644152d7f59cc43c Mon Sep 17 00:00:00 2001 From: shashank mehra Date: Mon, 29 Jan 2024 21:08:09 +0530 Subject: [PATCH 3/3] Add the handler back --- spec/integration/api_endpoints_spec.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spec/integration/api_endpoints_spec.rb b/spec/integration/api_endpoints_spec.rb index dc86d81..4ddd895 100644 --- a/spec/integration/api_endpoints_spec.rb +++ b/spec/integration/api_endpoints_spec.rb @@ -522,7 +522,10 @@ def await_event_propagation it "doesn't delete used queue if if-unused is set" do q = @channel.queue(queue_name, durable: false) - consumer = q.subscribe + # Simulate the queue being used by creating a consumer + consumer = q.subscribe do |_delivery_info, _properties, _body| + # consumer block + end expect do subject.delete_queue("/", queue_name, true, false)