Skip to content

Commit 0e12cb2

Browse files
committed
move to checks
1 parent 49f29b5 commit 0e12cb2

File tree

4 files changed

+80
-5
lines changed

4 files changed

+80
-5
lines changed

examples/register_service.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ async fn main() {
2727
Port: Some(42424),
2828
Namespace: None,
2929
}),
30-
Check: None,
30+
Checks: Vec::new(),
3131
SkipNodeUpdate: None,
3232
};
3333
consul.register_entity(&payload).await.unwrap();

src/types.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -312,9 +312,8 @@ pub struct RegisterEntityPayload {
312312
/// Optional service to register.
313313
#[serde(skip_serializing_if = "Option::is_none")]
314314
pub Service: Option<RegisterEntityService>,
315-
/// Optional check to register
316-
#[serde(skip_serializing_if = "Option::is_none")]
317-
pub Check: Option<RegisterEntityCheck>,
315+
/// Checks to register.
316+
pub Checks: Vec<RegisterEntityCheck>,
318317
/// Whether to skip updating the nodes information in the registration.
319318
#[serde(skip_serializing_if = "Option::is_none")]
320319
pub SkipNodeUpdate: Option<bool>,

tests/test_runner.rs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
use rs_consul::*;
2+
use std::collections::HashMap;
23

34
#[path = "utils/test_setup.rs"]
45
mod test_setup;
@@ -304,4 +305,35 @@ mod tests {
304305
assert_eq!(string_value4, &value.unwrap());
305306
assert_ne!(mod_idx3, mod_idx4);
306307
}
308+
309+
#[tokio::test(flavor = "multi_thread")]
310+
async fn test_register_with_health_checks() {
311+
let consul = get_client();
312+
313+
let new_service_name = "test-service-99".to_string();
314+
let checks = [
315+
RegisterEntityCheck {
316+
Node: None,
317+
CheckID: None,
318+
Name: "Service Check".to_string(),
319+
Notes: None,
320+
Status: Some("passing".to_string()),
321+
ServiceID: Some(service_id(&new_service_name)),
322+
Definition: HashMap::new(),
323+
},
324+
RegisterEntityCheck {
325+
Node: Some("local".to_string()),
326+
CheckID: None,
327+
Name: "Node check".to_string(),
328+
Notes: None,
329+
Status: Some("passing".to_string()),
330+
ServiceID: None,
331+
Definition: HashMap::new(),
332+
},
333+
]
334+
.to_vec();
335+
register_entity_with_checks(&consul, &new_service_name, "local", checks).await;
336+
337+
assert!(is_registered(&consul, &new_service_name).await);
338+
}
307339
}

tests/utils/test_setup.rs

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ pub(crate) async fn register_entity(consul: &Consul, service_name: &String, node
3131
Port: Some(42424),
3232
Namespace: None,
3333
}),
34-
Check: None,
34+
Checks: Vec::new(),
3535
SkipNodeUpdate: None,
3636
};
3737
consul
@@ -40,6 +40,50 @@ pub(crate) async fn register_entity(consul: &Consul, service_name: &String, node
4040
.expect("expected register_entity request to succeed");
4141
}
4242

43+
pub(crate) async fn register_entity_with_checks(
44+
consul: &Consul,
45+
service_name: &String,
46+
node_id: &str,
47+
checks: Vec<RegisterEntityCheck>,
48+
) {
49+
let ResponseMeta {
50+
response: service_names_before_register,
51+
..
52+
} = consul
53+
.get_all_registered_service_names(None)
54+
.await
55+
.expect("expected get_registered_service_names request to succeed");
56+
assert!(!service_names_before_register.contains(service_name));
57+
58+
let payload = RegisterEntityPayload {
59+
ID: None,
60+
Node: node_id.to_string(),
61+
Address: "127.0.0.1".to_string(),
62+
Datacenter: None,
63+
TaggedAddresses: Default::default(),
64+
NodeMeta: Default::default(),
65+
Service: Some(RegisterEntityService {
66+
ID: Some(service_id(service_name)),
67+
Service: service_name.clone(),
68+
Tags: vec![],
69+
TaggedAddresses: Default::default(),
70+
Meta: Default::default(),
71+
Port: Some(42424),
72+
Namespace: None,
73+
}),
74+
Checks: checks,
75+
SkipNodeUpdate: None,
76+
};
77+
consul
78+
.register_entity(&payload)
79+
.await
80+
.expect("expected register_entity request to succeed");
81+
}
82+
83+
pub(crate) fn service_id(service_name: &str) -> String {
84+
format!("{service_name}-ID")
85+
}
86+
4387
pub(crate) async fn is_registered(consul: &Consul, service_name: &String) -> bool {
4488
let ResponseMeta {
4589
response: service_names_after_register,

0 commit comments

Comments
 (0)