Skip to content

Commit ec31fde

Browse files
Fix a --queue-type CLI type bug; more tests
1 parent 31c4623 commit ec31fde

File tree

3 files changed

+93
-11
lines changed

3 files changed

+93
-11
lines changed

src/commands.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -425,8 +425,8 @@ pub fn declare_federation_upstream(
425425
.get_one::<String>("exchange_name")
426426
.map(|s| s.as_str());
427427
let queue_type = command_args
428-
.get_one::<QueueType>("queue_type")
429-
.cloned()
428+
.get_one::<String>("queue_type")
429+
.map(|s| Into::<QueueType>::into(s.as_str()))
430430
.unwrap_or_default();
431431
let max_hops = command_args.get_one::<u8>("max_hops").copied();
432432
let resource_cleanup_mode = command_args

tests/exchange_federation_tests.rs

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ fn test_federation_upstream_declaration_for_exchange_federation_case0()
5151
}
5252

5353
#[test]
54-
fn test_federation_upstream_declaration_for_exchange_federation_case1()
54+
fn test_federation_upstream_declaration_for_exchange_federation_case1a()
5555
-> Result<(), Box<dyn std::error::Error>> {
56-
let vh = "rust.federation.1";
57-
let name = "up.for_exchange_federation.1";
56+
let vh = "rust.federation.1a";
57+
let name = "up.for_exchange_federation.1a";
5858

5959
let amqp_endpoint = amqp_endpoint_with_vhost(vh);
60-
let x = "federation.x.1";
60+
let x = "federation.x.1a";
6161
let queue_type = QueueType::Quorum;
6262
let xfp = ExchangeFederationParams::new(queue_type);
6363
let endpoint1 = amqp_endpoint.clone();
@@ -87,6 +87,46 @@ fn test_federation_upstream_declaration_for_exchange_federation_case1()
8787
Ok(())
8888
}
8989

90+
#[test]
91+
fn test_federation_upstream_declaration_for_exchange_federation_case1b()
92+
-> Result<(), Box<dyn std::error::Error>> {
93+
let vh = "rust.federation.1b";
94+
let name = "up.for_exchange_federation.1b";
95+
96+
let amqp_endpoint = amqp_endpoint_with_vhost(vh);
97+
let x = "federation.x.1b";
98+
let queue_type = QueueType::Quorum;
99+
let xfp = ExchangeFederationParams::new(queue_type);
100+
let endpoint1 = amqp_endpoint.clone();
101+
let upstream =
102+
FederationUpstreamParams::new_exchange_federation_upstream(vh, name, &endpoint1, xfp);
103+
104+
run_succeeds(["declare", "vhost", "--name", vh]);
105+
let xfp = upstream.exchange_federation.unwrap();
106+
107+
run_succeeds([
108+
"-V",
109+
vh,
110+
"federation",
111+
"declare_upstream",
112+
"--name",
113+
&upstream.name,
114+
"--uri",
115+
&upstream.uri,
116+
"--exchange-name",
117+
&x,
118+
"--queue-type",
119+
&xfp.queue_type.to_string(),
120+
// queue federation
121+
"--queue-name",
122+
"overridden.queue.name"
123+
]);
124+
125+
delete_vhost(vh).expect("failed to delete a virtual host");
126+
127+
Ok(())
128+
}
129+
90130
#[test]
91131
fn test_federation_upstream_declaration_for_exchange_federation_case2()
92132
-> Result<(), Box<dyn std::error::Error>> {

tests/queue_federation_tests.rs

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,14 @@ fn test_federation_upstream_declaration_for_queue_federation_case0()
5656
}
5757

5858
#[test]
59-
fn test_federation_upstream_declaration_for_queue_federation_case1()
59+
fn test_federation_upstream_declaration_for_queue_federation_case1a()
6060
-> Result<(), Box<dyn std::error::Error>> {
61-
let vh = "rust.federation.1";
62-
let name = "up.for_queue_federation";
61+
let vh = "rust.federation.1a";
62+
let name = "up.for_queue_federation.a";
6363

6464
let amqp_endpoint = amqp_endpoint_with_vhost(vh);
65-
let q = "federation.cq.1";
66-
let ctag = "federation.custom-consumer-tag";
65+
let q = "federation.cq.1a";
66+
let ctag = "federation.custom-consumer-tag.a";
6767
let qfp = QueueFederationParams::new_with_consumer_tag(q, ctag);
6868
let endpoint1 = amqp_endpoint.clone();
6969
let upstream =
@@ -94,6 +94,48 @@ fn test_federation_upstream_declaration_for_queue_federation_case1()
9494
Ok(())
9595
}
9696

97+
#[test]
98+
fn test_federation_upstream_declaration_for_queue_federation_case1b()
99+
-> Result<(), Box<dyn std::error::Error>> {
100+
let vh = "rust.federation.1b";
101+
let name = "up.for_queue_federation.b";
102+
103+
let amqp_endpoint = amqp_endpoint_with_vhost(vh);
104+
let q = "federation.cq.1b";
105+
let ctag = "federation.custom-consumer-tag.b";
106+
let qfp = QueueFederationParams::new_with_consumer_tag(q, ctag);
107+
let endpoint1 = amqp_endpoint.clone();
108+
let upstream =
109+
FederationUpstreamParams::new_queue_federation_upstream(vh, name, &endpoint1, qfp);
110+
111+
run_succeeds(["declare", "vhost", "--name", vh]);
112+
let qfp = upstream.queue_federation.unwrap();
113+
114+
run_succeeds([
115+
"-V",
116+
vh,
117+
"federation",
118+
"declare_upstream",
119+
"--name",
120+
&upstream.name,
121+
"--uri",
122+
&upstream.uri,
123+
"--ack-mode",
124+
"on-confirm",
125+
"--queue-name",
126+
&q,
127+
"--consumer-tag",
128+
&qfp.consumer_tag.unwrap(),
129+
// exchange federation
130+
"--queue-type",
131+
"quorum"
132+
]);
133+
134+
delete_vhost(vh).expect("failed to delete a virtual host");
135+
136+
Ok(())
137+
}
138+
97139
#[test]
98140
fn test_federation_upstream_declaration_for_queue_federation_case2()
99141
-> Result<(), Box<dyn std::error::Error>> {

0 commit comments

Comments
 (0)