reactive_graph_client/client/runtime/instance/queries/
get_instance_info.rs

1#[cynic::schema_for_derives(file = r#"../../schema/graphql/reactive-graph-runtime-schema.graphql"#, module = "crate::schema_runtime::schema")]
2pub mod queries {
3    use crate::schema_runtime::instance::InstanceInfo;
4
5    #[derive(cynic::QueryFragment, Debug)]
6    #[cynic(graphql_type = "Query")]
7    pub struct GetInstanceInfo {
8        pub instance_info: InstanceInfo,
9    }
10
11    pub fn get_instance_info() -> cynic::Operation<GetInstanceInfo, ()> {
12        use cynic::QueryBuilder;
13        GetInstanceInfo::build(())
14    }
15}
16
17#[cfg(all(test, feature = "integration-tests"))]
18pub mod test {
19    use crate::ReactiveGraphClient;
20    use reactive_graph_runtime_api::Runtime;
21    use reactive_graph_runtime_impl::RuntimeBuilder;
22    use std::sync::Arc;
23    use std::time::Duration;
24    use tokio::time::sleep;
25
26    #[tokio::test(flavor = "multi_thread")]
27    async fn test_get_instance_info() {
28        RuntimeBuilder::new()
29            .ignore_config_files()
30            .disable_all_plugins(true)
31            .instance_name("iojasdf")
32            .instance_description("oijasdfnmei")
33            .pick_free_port()
34            .init()
35            .await
36            .post_init()
37            .await
38            .spawn()
39            .await
40            .with_runtime(|runtime: Arc<dyn Runtime + Send + Sync>| async move {
41                sleep(Duration::from_millis(2000)).await;
42
43                // Get instance info from the runtime
44                let rt_instance_info = runtime.get_instance_service().get_instance_info();
45                let rt_address = rt_instance_info.address();
46
47                // Create a client
48                let client = ReactiveGraphClient::new(rt_address.clone()).expect("Cannot create client");
49
50                // Fetch instance info via client & graphql
51                let instance_info = client.runtime().instance().get_instance_info().await.expect("Cannot fetch instance info");
52
53                assert_eq!(instance_info.address.hostname, rt_address.hostname);
54                assert_eq!(u16::try_from(instance_info.address.port).expect("invalid port number"), rt_address.port);
55                assert_eq!(instance_info.address.secure, rt_address.secure);
56                assert_eq!(instance_info.name, rt_instance_info.name);
57                assert_eq!(instance_info, rt_instance_info);
58            })
59            .await
60            .stop()
61            .await
62            .pre_shutdown()
63            .await
64            .shutdown()
65            .await;
66    }
67}