Skip to content

Commit a09ed55

Browse files
Support one more endpoint for listing channels
1 parent d886fae commit a09ed55

File tree

3 files changed

+44
-2
lines changed

3 files changed

+44
-2
lines changed

src/api.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,6 +405,13 @@ where
405405
.await
406406
}
407407

408+
/// Lists all channels on a given AMQP 0-9-1 connection.
409+
/// See [Channels Guide](https://www.rabbitmq.com/docs/channels) to learn more.
410+
pub async fn list_channels_on(&self, connection_name: &str) -> Result<Vec<responses::Channel>> {
411+
self.get_api_request(path!("connections", connection_name, "channels"))
412+
.await
413+
}
414+
408415
/// Lists all stream publishers across the cluster.
409416
pub async fn list_stream_publishers(&self) -> Result<Vec<responses::StreamPublisher>> {
410417
let response = self

src/blocking_api.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,12 @@ where
386386
self.get_api_request(path!("vhosts", virtual_host, "channels"))
387387
}
388388

389+
/// Lists all channels on a given AMQP 0-9-1 connection.
390+
/// See [Channels Guide](https://www.rabbitmq.com/docs/channels) to learn more.
391+
pub fn list_channels_on(&self, connection_name: &str) -> Result<Vec<responses::Channel>> {
392+
self.get_api_request(path!("connections", connection_name, "channels"))
393+
}
394+
389395
/// Lists all stream publishers across the cluster.
390396
pub fn list_stream_publishers(&self) -> Result<Vec<responses::StreamPublisher>> {
391397
self.get_api_request(path!("stream", "publishers"))

tests/async_channel_tests.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@
1313
// limitations under the License.
1414
use amqprs::connection::{Connection, OpenConnectionArguments};
1515
use rabbitmq_http_client::api::Client;
16+
use std::time::Duration;
1617

1718
mod test_helpers;
1819
use crate::test_helpers::{PASSWORD, USERNAME, endpoint, hostname};
1920

2021
#[tokio::test]
21-
async fn test_list_channels() {
22+
async fn test_async_list_channels() {
2223
let endpoint = endpoint();
2324
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
2425

@@ -38,7 +39,7 @@ async fn test_list_channels() {
3839
}
3940

4041
#[tokio::test]
41-
async fn test_list_virtual_host_channels() {
42+
async fn test_async_list_virtual_host_channels() {
4243
let endpoint = endpoint();
4344
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
4445

@@ -57,3 +58,31 @@ async fn test_list_virtual_host_channels() {
5758
ch.close().await.unwrap();
5859
conn.clone().close().await.unwrap();
5960
}
61+
62+
#[tokio::test]
63+
async fn test_async_list_channels_on_connection() {
64+
let endpoint = endpoint();
65+
let rc = Client::new(&endpoint, USERNAME, PASSWORD);
66+
67+
let args = OpenConnectionArguments::new(&hostname(), 5672, USERNAME, PASSWORD);
68+
let conn = Connection::open(&args).await.unwrap();
69+
assert!(conn.is_open());
70+
71+
let ch = conn.open_channel(None).await.unwrap();
72+
assert!(ch.is_open());
73+
74+
tokio::time::sleep(Duration::from_millis(1000)).await;
75+
76+
let connections = rc.list_connections().await.unwrap();
77+
let first = connections.first().unwrap();
78+
79+
let result1 = rc.list_channels_on(&first.name).await;
80+
assert!(result1.is_ok(), "list_channels_on returned {result1:?}");
81+
82+
let channels = result1.unwrap();
83+
assert_eq!(1, channels.len());
84+
85+
// just to be explicit
86+
ch.close().await.unwrap();
87+
conn.clone().close().await.unwrap();
88+
}

0 commit comments

Comments
 (0)