1use serde::{Deserialize, Serialize};
21
22create_struct!(Plan, "PascalCase",
24 name: String
25);
26
27create_struct!(Server, "PascalCase",
28 name: String
29);
30
31create_struct!(Disk, "PascalCase",
32 i_d: String,
33 name: String,
34 size_m_b: usize,
35 created_at: String,
36 plan: Plan,
37 availability: String,
38 server: Option<Server>
39);
40
41create_struct!(DiskList, "PascalCase",
42 from: usize,
43 count: usize,
44 total: usize,
45 disks: Vec<Disk>
46);
47
48create_struct!(DiskCreated, "PascalCase",
49 success: String,
50 disk: Disk
51);
52
53create_struct!(DiskQuery, "PascalCase",
54 disk: Disk
55);
56
57#[cfg(test)]
58mod tests {
59 use ssh2::Session;
60
61 use crate::api::server;
62 use crate::Client;
63 use crate::Zone;
64
65 use super::*;
66
67 #[tokio::test]
68 #[ignore]
69 async fn test_get_disk() {
70 let client = Client::default().set_zone(Zone::Tokyo2);
71 let dl: DiskList = client.clear().disk().get().await.unwrap();
72 assert_eq!(dl.total, 0);
73 }
74
75 #[tokio::test]
76 #[ignore]
77 async fn test_post_disk() {
78 let zone = Zone::Tokyo2;
79 let client = Client::default().set_zone(zone);
80 let dl: DiskList = client.clone().clear().disk().get().await.unwrap();
82 assert_eq!(dl.total, 0);
83 let ssh_key_path = home::home_dir().unwrap().join(".ssh").join("id_rsa.pub");
85 let ssh_key = std::fs::read_to_string(&ssh_key_path).unwrap();
86 let dpl: crate::api::product::DiskPlanList =
87 client.clone().clear().product().disk().get().await.unwrap();
88 let ubuntu_2204 = 113402076879;
89 let disk_id = shortcuts::create(
90 client.clone(),
91 "test_disk",
92 dpl.disk_plans[0].i_d,
93 20480,
94 ubuntu_2204,
95 &ssh_key,
96 )
97 .await
98 .unwrap();
99 let dl: DiskList = client.clone().clear().disk().get().await.unwrap();
100 assert_eq!(dl.total, 1);
101 let spl: crate::api::product::ServerPlanList = client
103 .clone()
104 .clear()
105 .product()
106 .server()
107 .get()
108 .await
109 .unwrap();
110 let server_id =
111 server::shortcuts::create(client.clone(), "test_server", spl.server_plans[0].i_d)
112 .await
113 .unwrap();
114 let _ = client
116 .clone()
117 .clear()
118 .disk()
119 .diskid(&disk_id)
120 .to()
121 .server()
122 .serverid(&server_id)
123 .put()
124 .await
125 .unwrap();
126 server::shortcuts::power_on(client.clone(), &server_id)
128 .await
129 .unwrap();
130 let server_query: server::ServerQuery = client
132 .clone()
133 .server()
134 .serverid(&server_id)
135 .get()
136 .await
137 .unwrap();
138 let ip_addr = server_query.server.interfaces[0]
139 .i_p_address
140 .as_ref()
141 .unwrap();
142 let tcp = std::net::TcpStream::connect(format!("{}:22", ip_addr)).unwrap();
143 let mut sess = Session::new().unwrap();
144 sess.set_tcp_stream(tcp);
145 sess.handshake().unwrap();
146 let home_dir = home::home_dir().unwrap();
147 let private_file = home_dir.join(".ssh").join("id_rsa");
148 sess.userauth_pubkey_file("ubuntu", None, private_file.as_path(), None)
149 .unwrap();
150 assert!(sess.authenticated());
151 server::shortcuts::power_off(client.clone(), &server_id).await.unwrap();
153 for disk in dl.disks.iter() {
155 let _res = client
156 .clone()
157 .clear()
158 .disk()
159 .diskid(&disk.i_d)
160 .delete()
161 .await
162 .unwrap();
163 }
164 let delte_params = crate::api::server::params::ParamsWithDisk::default()
166 .disk_ids(vec![disk_id.parse::<usize>().unwrap()]);
167 let _res = client
168 .clone()
169 .clear()
170 .server()
171 .serverid(&server_id)
172 .set_params(&delte_params)
173 .unwrap()
174 .delete()
175 .await
176 .unwrap();
177 let sl: crate::api::server::ServerList =
178 client.clone().clear().server().get().await.unwrap();
179 assert_eq!(sl.total, 0);
180 let dl: DiskList = client.clone().clear().disk().get().await.unwrap();
181 assert_eq!(dl.total, 0);
182 }
183}
184
185pub mod params;
186pub mod shortcuts;