1use serde::{Deserialize, Serialize};
36
37create_struct!(ServerPlan, "PascalCase",
38 c_p_u: u8,
39 g_p_u: u8,
40 memory_m_b: u32
41);
42
43create_struct!(Disk, "PascalCase",
44 i_d: String
45);
46
47create_struct!(Server, "PascalCase",
48 i_d: String,
49 name: String,
50 host_name: String,
51 created_at: String,
52 server_plan: ServerPlan,
53 interfaces: Vec<super::interface::Interface>,
54 instance: Instance,
55 disks: Vec<Disk>
56);
57
58create_struct!(ServerList, "PascalCase",
59 from: usize,
60 count: usize,
61 total: usize,
62 servers: Vec<Server>
63);
64
65create_struct!(ServerCreated, "PascalCase",
66 success: bool,
67 server: Server
68);
69
70create_struct!(Instance, "PascalCase",
71 status: String,
72 before_status: Option<String>,
73 status_changed_at: Option<String>
74);
75
76create_struct!(ServerStatus, "PascalCase",
77 instance: Instance
78);
79
80create_struct!(ServerQuery, "PascalCase",
81 server: Server
82);
83
84#[cfg(test)]
85mod tests {
86 use super::*;
87 use crate::Client;
88 use crate::Zone;
89
90 #[tokio::test]
91 #[ignore]
92 async fn test_get_servers() {
93 let client = Client::default().set_zone(Zone::Ishikari1);
94 let sl: ServerList = client.clone().server().get().await.unwrap();
95 assert_eq!(sl.total, 1);
99 let server_query: ServerQuery = client
100 .clone()
101 .server()
102 .serverid(&sl.servers[0].i_d)
103 .get()
104 .await
105 .unwrap();
106 assert!(server_query.server.interfaces[0].i_p_address.is_some());
107 }
108
109 #[tokio::test]
110 #[ignore]
111 async fn test_post_server() {
112 let client = Client::default().set_zone(Zone::Tokyo2);
113 let sl: ServerList = client.clone().clear().server().get().await.unwrap();
115 assert_eq!(sl.total, 0);
116 let spl: crate::api::product::ServerPlanList = client
118 .clone()
119 .clear()
120 .product()
121 .server()
122 .get()
123 .await
124 .unwrap();
125 let create_params = params::Params::default()
126 .name("test_server")
127 .server_plan(spl.server_plans[0].i_d);
128 let new_server: ServerCreated = client
129 .clone()
130 .clear()
131 .server()
132 .set_params(&create_params)
133 .unwrap()
134 .post()
135 .await
136 .unwrap();
137 assert!(new_server.success);
138 let sl: ServerList = client.clone().clear().server().get().await.unwrap();
139 assert_eq!(sl.total, 1);
140 let if_params =
142 crate::api::interface::parameter::Params::default().server_id(new_server.server.i_d);
143 let i_f: crate::api::interface::InterfaceCreated = client
144 .clone()
145 .clear()
146 .interface()
147 .set_params(&if_params)
148 .unwrap()
149 .post()
150 .await
151 .unwrap();
152 assert!(i_f.success);
153 client
155 .clone()
156 .clear()
157 .interface()
158 .interfaceid(&i_f.interface.i_d)
159 .to()
160 .switch()
161 .shared()
162 .put()
163 .await
164 .unwrap();
165 let delte_params = params::ParamsWithDisk::default().disk_ids(vec![]);
167 let sl: ServerList = client.clone().clear().server().get().await.unwrap();
168 for server in sl.servers.iter() {
169 let _res = client
170 .clone()
171 .clear()
172 .server()
173 .serverid(&server.i_d)
174 .set_params(&delte_params)
175 .unwrap()
176 .delete()
177 .await
178 .unwrap();
179 }
180 let sl: ServerList = client.clone().clear().server().get().await.unwrap();
181 assert_eq!(sl.total, 0);
182 }
183
184 #[tokio::test]
185 #[ignore]
186 async fn test_server_power() {
187 let zone = Zone::Tokyo2;
188 let client = Client::default().set_zone(zone);
189 let spl: crate::api::product::ServerPlanList =
190 client.clone().product().server().get().await.unwrap();
191 let server_id = shortcuts::create(client.clone(), "test_server", spl.server_plans[0].i_d)
193 .await
194 .unwrap();
195 let server_status: ServerStatus = client
196 .clone()
197 .clear()
198 .server()
199 .serverid(&server_id)
200 .power()
201 .get()
202 .await
203 .unwrap();
204 assert!(server_status.instance.status == "down");
205 shortcuts::power_on(client.clone(), &server_id)
207 .await
208 .unwrap();
209 shortcuts::power_off(client.clone(), &server_id)
211 .await
212 .unwrap();
213 shortcuts::remove(client.clone(), &server_id, vec![])
215 .await
216 .unwrap();
217 }
218}
219
220
221pub mod params;
222pub mod shortcuts;