gcloud_spanner/admin/instance/
mod.rs1pub 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 replica_compute_capacity: vec![],
48 autoscaling_config: None,
49 state: 0,
50 labels: Default::default(),
51 instance_type: 0,
52 endpoint_uris: vec![],
53 create_time: None,
54 update_time: None,
55 free_instance_metadata: None,
56 edition: 0,
57 default_backup_schedule_type: 0,
58 }),
59 };
60
61 let creation_result = match client.create_instance(request, None).await {
62 Ok(mut res) => res.wait(None).await,
63 Err(err) => panic!("err: {err:?}"),
64 };
65 match creation_result {
66 Ok(res) => res.unwrap(),
67 Err(err) => panic!("err: {err:?}"),
68 }
69 }
70
71 #[tokio::test]
72 #[serial]
73 async fn test_create_instance() {
74 let instance = create_instance().await;
75 assert_eq!(instance.state, State::Ready as i32);
76 }
77
78 #[tokio::test]
79 #[serial]
80 async fn test_get_instance() {
81 let client = new_client().await;
82 let name = "projects/local-project/instances/test-instance".to_string();
83 let request = GetInstanceRequest {
84 name: name.clone(),
85 field_mask: None,
86 };
87
88 match client.get_instance(request, None).await {
89 Ok(res) => {
90 let instance = res.into_inner();
91 assert_eq!(instance.name, name);
92 }
93 Err(err) => panic!("err: {err:?}"),
94 };
95 }
96
97 #[tokio::test]
98 #[serial]
99 async fn test_delete_instance() {
100 let instance = create_instance().await;
101 let client = new_client().await;
102 let request = DeleteInstanceRequest {
103 name: instance.name.to_string(),
104 };
105 let _ = client.delete_instance(request, None).await.unwrap();
106 }
107
108 #[tokio::test]
109 #[serial]
110 async fn test_list_instances() {
111 let client = new_client().await;
112 let request = ListInstancesRequest {
113 parent: "projects/local-project".to_string(),
114 page_size: 1,
115 page_token: "".to_string(),
116 filter: "".to_string(),
117 instance_deadline: None,
118 };
119
120 match client.list_instances(request, None).await {
121 Ok(res) => {
122 println!("size = {}", res.len());
123 assert!(!res.is_empty());
124 }
125 Err(err) => panic!("err: {err:?}"),
126 };
127 }
128
129 #[tokio::test]
130 #[serial]
131 async fn test_list_instance_configs() {
132 let client = new_client().await;
133 let request = ListInstanceConfigsRequest {
134 parent: "projects/local-project".to_string(),
135 page_size: 1,
136 page_token: "".to_string(),
137 };
138
139 match client.list_instance_configs(request, None).await {
140 Ok(res) => {
141 println!("size = {}", res.len());
142 assert!(!res.is_empty());
143 }
144 Err(err) => panic!("err: {err:?}"),
145 };
146 }
147
148 #[tokio::test]
149 #[serial]
150 async fn test_get_instance_config() {
151 let client = new_client().await;
152 let name = "projects/local-project/instanceConfigs/emulator-config".to_string();
153 let request = GetInstanceConfigRequest { name: name.clone() };
154
155 match client.get_instance_config(request, None).await {
156 Ok(res) => {
157 let instance = res;
158 assert_eq!(instance.name, name);
159 }
160 Err(err) => panic!("err: {err:?}"),
161 };
162 }
163}