Skip to content

Commit a16335c

Browse files
Introduce Client#import_vhost_definitions
to import virtual host definitions (as opposed to cluster-wide ones)
1 parent a23c956 commit a16335c

File tree

6 files changed

+141
-17
lines changed

6 files changed

+141
-17
lines changed

CHANGELOG.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,22 @@
11
# Rust Client for the RabbitMQ HTTP API Change Log
22

3-
## v0.22.0 (in development)
3+
## v0.23.0 (in development)
44

55
No (documented) changes yet.
66

77

8-
## v0.21.0 (Feb 8, 2025)
8+
## v0.22.0 (Feb 8, 2025)
9+
10+
### Enhancements
11+
12+
* `Client#import_vhost_definitions` is a new function that imports virtual host-specific
13+
definition files (as opposed to cluster-wide ones) into the target virtual host
14+
15+
* `Client#import_cluster_wide_definitions` is an alias to `Client#import_definitions`
16+
to better reflect what it does
17+
18+
19+
## v0.21.0 (Feb 8, 2025)
920

1021
### Enhancements
1122

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,25 +14,25 @@ This library is relatively young, breaking API changes are possible.
1414
### Blocking Client
1515

1616
```toml
17-
rabbitmq_http_client = { version = "0.21.0", features = ["core", "blocking"] }
17+
rabbitmq_http_client = { version = "0.22.0", features = ["core", "blocking"] }
1818
```
1919

2020
### Async Client
2121

2222
```toml
23-
rabbitmq_http_client = { version = "0.21.0", features = ["core", "async"] }
23+
rabbitmq_http_client = { version = "0.22.0", features = ["core", "async"] }
2424
```
2525

2626
### Blocking Client with Tabled Support
2727

2828
```toml
29-
rabbitmq_http_client = { version = "0.21.0", features = ["core", "blocking", "tabled"] }
29+
rabbitmq_http_client = { version = "0.22.0", features = ["core", "blocking", "tabled"] }
3030
```
3131

3232
### Async Client with Tabled Support
3333

3434
```toml
35-
rabbitmq_http_client = { version = "0.21.0", features = ["core", "async", "tabled"] }
35+
rabbitmq_http_client = { version = "0.22.0", features = ["core", "async", "tabled"] }
3636
```
3737

3838

src/api.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1296,11 +1296,21 @@ where
12961296
}
12971297

12981298
pub async fn import_definitions(&self, definitions: Value) -> Result<()> {
1299+
self.import_cluster_wide_definitions(definitions).await
1300+
}
1301+
1302+
pub async fn import_cluster_wide_definitions(&self, definitions: Value) -> Result<()> {
12991303
self.http_post("definitions", &definitions, None, None)
13001304
.await?;
13011305
Ok(())
13021306
}
13031307

1308+
pub async fn import_vhost_definitions(&self, vhost: &str, definitions: Value) -> Result<()> {
1309+
self.http_post(path!("definitions", vhost), &definitions, None, None)
1310+
.await?;
1311+
Ok(())
1312+
}
1313+
13041314
//
13051315
// Health Checks
13061316
//

src/blocking_api.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,10 +1133,19 @@ where
11331133
}
11341134

11351135
pub fn import_definitions(&self, definitions: Value) -> Result<()> {
1136+
self.import_cluster_wide_definitions(definitions)
1137+
}
1138+
1139+
pub fn import_cluster_wide_definitions(&self, definitions: Value) -> Result<()> {
11361140
self.http_post("definitions", &definitions, None, None)?;
11371141
Ok(())
11381142
}
11391143

1144+
pub fn import_vhost_definitions(&self, vhost: &str, definitions: Value) -> Result<()> {
1145+
self.http_post(path!("definitions", vhost), &definitions, None, None)?;
1146+
Ok(())
1147+
}
1148+
11401149
//
11411150
// Health Checks
11421151
//

tests/async_definitions_tests.rs

Lines changed: 49 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
use rabbitmq_http_client::api::Client;
1515

1616
mod test_helpers;
17-
use crate::test_helpers::{await_metric_emission, endpoint, PASSWORD, USERNAME};
17+
use crate::test_helpers::{
18+
await_metric_emission, await_queue_metric_emission, endpoint, PASSWORD, USERNAME,
19+
};
1820
use rabbitmq_http_client::commons::PolicyTarget;
1921
use rabbitmq_http_client::requests::{
2022
ExchangeParams, PolicyParams, QueueParams, VirtualHostParams,
@@ -227,7 +229,7 @@ async fn test_async_export_vhost_definitions_as_data() {
227229
}
228230

229231
#[tokio::test]
230-
async fn test_async_import_definitions() {
232+
async fn test_async_import_cluster_definitions() {
231233
let endpoint = endpoint();
232234
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
233235
let _ = rc.delete_queue("/", "imported_queue", false).await;
@@ -240,8 +242,12 @@ async fn test_async_import_definitions() {
240242
}
241243
]});
242244

243-
let result = rc.import_definitions(defs).await;
244-
assert!(result.is_ok(), "import_definitions returned {:?}", result);
245+
let result = rc.import_cluster_wide_definitions(defs).await;
246+
assert!(
247+
result.is_ok(),
248+
"import_cluster_wide_definitions returned {:?}",
249+
result
250+
);
245251

246252
let result1 = rc.get_queue_info("/", "imported_queue").await;
247253
assert!(
@@ -250,3 +256,42 @@ async fn test_async_import_definitions() {
250256
result1
251257
);
252258
}
259+
260+
#[tokio::test]
261+
async fn test_async_import_vhost_definitions() {
262+
let endpoint = endpoint();
263+
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
264+
265+
let vh = "rust/http/api/async/vhost.definitions.import";
266+
let _ = rc.delete_vhost(vh, true).await.unwrap();
267+
268+
let vh_params = VirtualHostParams::named(vh);
269+
rc.create_vhost(&vh_params).await.unwrap();
270+
271+
let q = "imported_queue";
272+
let defs = json!({ "queues": [
273+
{
274+
"auto_delete": false,
275+
"durable": true,
276+
"name": q,
277+
}
278+
]});
279+
280+
let result = rc.import_vhost_definitions(vh, defs).await;
281+
assert!(
282+
result.is_ok(),
283+
"import_vhost_definitions returned {:?}",
284+
result
285+
);
286+
287+
await_queue_metric_emission();
288+
289+
let result1 = rc.get_queue_info(vh, q).await;
290+
assert!(
291+
result1.is_ok(),
292+
"can't get the imported queue: {:?}",
293+
result1
294+
);
295+
296+
let _ = rc.delete_vhost(vh, true).await.unwrap();
297+
}

tests/blocking_definitions_tests.rs

Lines changed: 56 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
use rabbitmq_http_client::blocking_api::Client;
1515

1616
mod test_helpers;
17-
use crate::test_helpers::{await_metric_emission, endpoint, PASSWORD, USERNAME};
17+
use crate::test_helpers::{
18+
await_metric_emission, await_queue_metric_emission, endpoint, PASSWORD, USERNAME,
19+
};
1820
use rabbitmq_http_client::commons::PolicyTarget;
1921
use rabbitmq_http_client::requests::{
2022
ExchangeParams, PolicyParams, QueueParams, VirtualHostParams,
@@ -214,26 +216,73 @@ fn test_blocking_export_vhost_definitions_as_data() {
214216
}
215217

216218
#[test]
217-
fn test_blocking_import_definitions() {
219+
fn test_blocking_import_cluster_definitions() {
218220
let endpoint = endpoint();
219221
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
220-
let _ = rc.delete_queue("/", "imported_queue", false);
222+
let q = "imported_queue";
223+
224+
let _ = rc.delete_queue("/", q, false);
221225
let defs = json!({ "queues": [
222226
{
223227
"auto_delete": false,
224228
"durable": true,
225-
"name": "imported_queue",
229+
"name": q,
226230
"vhost": "/"
227231
}
228232
]});
229233

230-
let result = rc.import_definitions(defs);
231-
assert!(result.is_ok(), "import_definitions returned {:?}", result);
234+
let result = rc.import_cluster_wide_definitions(defs);
235+
assert!(
236+
result.is_ok(),
237+
"import_cluster_wide_definitions returned {:?}",
238+
result
239+
);
232240

233-
let result1 = rc.get_queue_info("/", "imported_queue");
241+
let result1 = rc.get_queue_info("/", q);
242+
assert!(
243+
result1.is_ok(),
244+
"can't get the imported import_cluster_wide_definitions: {:?}",
245+
result1
246+
);
247+
248+
rc.delete_queue("/", q, true).unwrap();
249+
}
250+
251+
#[test]
252+
fn test_blocking_import_vhost_definitions() {
253+
let endpoint = endpoint();
254+
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
255+
256+
let vh = "rust/http/api/blocking/vhost.definitions.import";
257+
let _ = rc.delete_vhost(vh, true).unwrap();
258+
259+
let vh_params = VirtualHostParams::named(vh);
260+
rc.create_vhost(&vh_params).unwrap();
261+
262+
let q = "imported_queue";
263+
let defs = json!({ "queues": [
264+
{
265+
"auto_delete": false,
266+
"durable": true,
267+
"name": q,
268+
}
269+
]});
270+
271+
let result = rc.import_vhost_definitions(vh, defs);
272+
assert!(
273+
result.is_ok(),
274+
"import_vhost_definitions returned {:?}",
275+
result
276+
);
277+
278+
await_queue_metric_emission();
279+
280+
let result1 = rc.get_queue_info(vh, q);
234281
assert!(
235282
result1.is_ok(),
236283
"can't get the imported queue: {:?}",
237284
result1
238285
);
286+
287+
let _ = rc.delete_vhost(vh, true).unwrap();
239288
}

0 commit comments

Comments
 (0)