google_cloud_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 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}