google_cloud_spanner/admin/instance/
mod.rs

1pub mod instance_admin_client;
2
3#[cfg(test)]
4mod tests {
5    use serial_test::serial;
6    use time::OffsetDateTime;
7
8    use google_cloud_gax::conn::{ConnectionManager, ConnectionOptions, Environment};
9    use google_cloud_googleapis::spanner::admin::instance::v1::instance::State;
10
11    use google_cloud_googleapis::spanner::admin::instance::v1::{
12        CreateInstanceRequest, DeleteInstanceRequest, GetInstanceConfigRequest, GetInstanceRequest, Instance,
13        ListInstanceConfigsRequest, ListInstancesRequest,
14    };
15    use google_cloud_longrunning::autogen::operations_client::OperationsClient;
16
17    use crate::admin::instance::instance_admin_client::InstanceAdminClient;
18    use crate::apiv1::conn_pool::{AUDIENCE, SPANNER};
19
20    async fn new_client() -> InstanceAdminClient {
21        let conn_pool = ConnectionManager::new(
22            1,
23            SPANNER,
24            AUDIENCE,
25            &Environment::Emulator("localhost:9010".to_string()),
26            &ConnectionOptions::default(),
27        )
28        .await
29        .unwrap();
30        let lro_client = OperationsClient::new(conn_pool.conn()).await.unwrap();
31        InstanceAdminClient::new(conn_pool.conn(), lro_client)
32    }
33
34    async fn create_instance() -> Instance {
35        let client = new_client().await;
36        let instance_id = format!("test{}ut", OffsetDateTime::now_utc().unix_timestamp_nanos());
37        let name = format!("projects/local-project/instances/{instance_id}");
38        let request = CreateInstanceRequest {
39            parent: "projects/local-project".to_string(),
40            instance_id: instance_id.to_string(),
41            instance: Some(Instance {
42                name: name.to_string(),
43                config: "".to_string(),
44                display_name: "test-instance-ut".to_string(),
45                node_count: 0,
46                processing_units: 0,
47                autoscaling_config: None,
48                state: 0,
49                labels: Default::default(),
50                endpoint_uris: vec![],
51                create_time: None,
52                update_time: None,
53                edition: 0,
54            }),
55        };
56
57        let creation_result = match client.create_instance(request, None).await {
58            Ok(mut res) => res.wait(None).await,
59            Err(err) => panic!("err: {err:?}"),
60        };
61        match creation_result {
62            Ok(res) => res.unwrap(),
63            Err(err) => panic!("err: {err:?}"),
64        }
65    }
66
67    #[tokio::test]
68    #[serial]
69    async fn test_create_instance() {
70        let instance = create_instance().await;
71        assert_eq!(instance.state, State::Ready as i32);
72    }
73
74    #[tokio::test]
75    #[serial]
76    async fn test_get_instance() {
77        let client = new_client().await;
78        let name = "projects/local-project/instances/test-instance".to_string();
79        let request = GetInstanceRequest {
80            name: name.clone(),
81            field_mask: None,
82        };
83
84        match client.get_instance(request, None).await {
85            Ok(res) => {
86                let instance = res.into_inner();
87                assert_eq!(instance.name, name);
88            }
89            Err(err) => panic!("err: {err:?}"),
90        };
91    }
92
93    #[tokio::test]
94    #[serial]
95    async fn test_delete_instance() {
96        let instance = create_instance().await;
97        let client = new_client().await;
98        let request = DeleteInstanceRequest {
99            name: instance.name.to_string(),
100        };
101        let _ = client.delete_instance(request, None).await.unwrap();
102    }
103
104    #[tokio::test]
105    #[serial]
106    async fn test_list_instances() {
107        let client = new_client().await;
108        let request = ListInstancesRequest {
109            parent: "projects/local-project".to_string(),
110            page_size: 1,
111            page_token: "".to_string(),
112            filter: "".to_string(),
113            instance_deadline: None,
114        };
115
116        match client.list_instances(request, None).await {
117            Ok(res) => {
118                println!("size = {}", res.len());
119                assert!(!res.is_empty());
120            }
121            Err(err) => panic!("err: {err:?}"),
122        };
123    }
124
125    #[tokio::test]
126    #[serial]
127    async fn test_list_instance_configs() {
128        let client = new_client().await;
129        let request = ListInstanceConfigsRequest {
130            parent: "projects/local-project".to_string(),
131            page_size: 1,
132            page_token: "".to_string(),
133        };
134
135        match client.list_instance_configs(request, None).await {
136            Ok(res) => {
137                println!("size = {}", res.len());
138                assert!(!res.is_empty());
139            }
140            Err(err) => panic!("err: {err:?}"),
141        };
142    }
143
144    #[tokio::test]
145    #[serial]
146    async fn test_get_instance_config() {
147        let client = new_client().await;
148        let name = "projects/local-project/instanceConfigs/emulator-config".to_string();
149        let request = GetInstanceConfigRequest { name: name.clone() };
150
151        match client.get_instance_config(request, None).await {
152            Ok(res) => {
153                let instance = res;
154                assert_eq!(instance.name, name);
155            }
156            Err(err) => panic!("err: {err:?}"),
157        };
158    }
159}