Skip to content

Commit 79d9961

Browse files
committed
add tests
1 parent 4ab3c11 commit 79d9961

3 files changed

Lines changed: 289 additions & 5 deletions

File tree

Cargo.lock

Lines changed: 24 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coman/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,6 @@ anyhow = "1.0.90"
7878
vergen-gix = { version = "1.0.2", features = ["build", "cargo"] }
7979

8080
[dev-dependencies]
81+
claim = "0.5.0"
82+
injectorpp = "0.4.0"
8183
rstest = "0.26.1"

coman/src/cscs/api_client/client.rs

Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,3 +201,266 @@ impl CscsApi {
201201
Ok(result.into())
202202
}
203203
}
204+
205+
#[cfg(test)]
206+
mod tests {
207+
use claim::*;
208+
use firecrest_client::types::{
209+
DownloadFileResponse, FirecrestFilesystemTransferModelsTransferJob, GetJobMetadataResponse, GetJobResponse,
210+
GetSystemsResponse, HPCCluster, JobMetadataModel, JobModel, JobStatus, PostJobSubmissionResponse,
211+
S3TransferResponse, UploadFileResponse,
212+
};
213+
use injectorpp::interface::injector::*;
214+
215+
use super::*;
216+
217+
fn get_client() -> CscsApi {
218+
CscsApi {
219+
client: FirecrestClient::default(),
220+
}
221+
}
222+
223+
#[tokio::test]
224+
async fn test_start_job() {
225+
let client = get_client();
226+
let mut injector = InjectorPP::new();
227+
injector
228+
.when_called_async(injectorpp::async_func!(
229+
firecrest_client::compute_api::post_compute_system_job(
230+
&client.client,
231+
"",
232+
None,
233+
"",
234+
None,
235+
None,
236+
None,
237+
HashMap::new()
238+
),
239+
Result<PostJobSubmissionResponse>
240+
))
241+
.will_return_async(injectorpp::async_return!(
242+
Ok(PostJobSubmissionResponse { job_id: Some(1) }),
243+
Result<PostJobSubmissionResponse>
244+
));
245+
let result = client
246+
.start_job("test", None, "test", PathBuf::from("/test"), HashMap::new())
247+
.await;
248+
assert_ok!(result);
249+
}
250+
251+
#[tokio::test]
252+
async fn test_list_systems() {
253+
{
254+
let client = get_client();
255+
let mut injector = InjectorPP::new();
256+
injector
257+
.when_called_async(injectorpp::async_func!(
258+
firecrest_client::status_api::get_status_systems(&client.client),
259+
Result<GetSystemsResponse>
260+
))
261+
.will_return_async(injectorpp::async_return!(
262+
Ok(GetSystemsResponse {
263+
systems: vec![
264+
HPCCluster {
265+
name: "daint".to_owned(),
266+
..Default::default()
267+
},
268+
HPCCluster {
269+
name: "eiger".to_owned(),
270+
..Default::default()
271+
}
272+
],
273+
..Default::default()
274+
}),
275+
Result<GetSystemsResponse>
276+
));
277+
let result = client.list_systems().await;
278+
let systems = result.unwrap();
279+
assert_eq!(systems.len(), 2);
280+
281+
let result = client.get_system("daint").await;
282+
let system = result.unwrap();
283+
assert_some!(system.clone());
284+
assert_eq!(system.unwrap().name, "daint");
285+
}
286+
}
287+
288+
#[tokio::test]
289+
async fn test_list_jobs() {
290+
{
291+
let client = get_client();
292+
let mut injector = InjectorPP::new();
293+
injector
294+
.when_called_async(injectorpp::async_func!(
295+
firecrest_client::compute_api::get_compute_system_jobs(&client.client, "", None,),
296+
Result<GetJobResponse>
297+
))
298+
.will_return_async(injectorpp::async_return!(
299+
Ok(GetJobResponse {
300+
jobs: Some(vec![
301+
JobModel {
302+
name: "Job1".to_owned(),
303+
job_id: 1,
304+
status: JobStatus {
305+
state: "RUNNING".to_owned(),
306+
..Default::default()
307+
},
308+
..Default::default()
309+
},
310+
JobModel {
311+
name: "Job2".to_owned(),
312+
job_id: 2,
313+
status: JobStatus {
314+
state: "FAILED".to_owned(),
315+
..Default::default()
316+
},
317+
..Default::default()
318+
},
319+
JobModel {
320+
name: "Job3".to_owned(),
321+
job_id: 3,
322+
status: JobStatus {
323+
state: "COMPLETED".to_owned(),
324+
..Default::default()
325+
},
326+
..Default::default()
327+
},
328+
JobModel {
329+
name: "Job4".to_owned(),
330+
job_id: 4,
331+
status: JobStatus {
332+
state: "PENDING".to_owned(),
333+
..Default::default()
334+
},
335+
..Default::default()
336+
},
337+
JobModel {
338+
name: "Job5".to_owned(),
339+
job_id: 5,
340+
status: JobStatus {
341+
state: "CANCELLED".to_owned(),
342+
..Default::default()
343+
},
344+
..Default::default()
345+
}
346+
])
347+
}),
348+
Result<GetJobResponse>
349+
));
350+
let result = client.list_jobs("daint", None).await;
351+
assert_eq!(result.unwrap().len(), 5);
352+
}
353+
}
354+
355+
#[tokio::test]
356+
async fn test_get_job() {
357+
{
358+
let client = get_client();
359+
let mut injector = InjectorPP::new();
360+
injector
361+
.when_called_async(injectorpp::async_func!(
362+
firecrest_client::compute_api::get_compute_system_job(&client.client, "", 1,),
363+
Result<GetJobResponse>
364+
))
365+
.will_return_async(injectorpp::async_return!(
366+
Ok(GetJobResponse {
367+
jobs: Some(vec![JobModel {
368+
name: "Job1".to_owned(),
369+
job_id: 1,
370+
status: JobStatus {
371+
state: "RUNNING".to_owned(),
372+
..Default::default()
373+
},
374+
..Default::default()
375+
}])
376+
}),
377+
Result<GetJobResponse>
378+
));
379+
injector
380+
.when_called_async(injectorpp::async_func!(
381+
firecrest_client::compute_api::get_compute_system_job_metadata(&client.client, "", 1,),
382+
Result<GetJobMetadataResponse>
383+
))
384+
.will_return_async(injectorpp::async_return!(
385+
Ok(GetJobMetadataResponse {
386+
jobs: Some(vec![JobMetadataModel {
387+
job_id: "1".to_owned(),
388+
..Default::default()
389+
}])
390+
}),
391+
Result<GetJobMetadataResponse>
392+
));
393+
let result = client.get_job("test", 1).await;
394+
assert_ok!(result);
395+
}
396+
}
397+
398+
#[tokio::test]
399+
async fn test_transfer_upload() {
400+
let client = get_client();
401+
let mut injector = InjectorPP::new();
402+
injector
403+
.when_called_async(injectorpp::async_func!(
404+
firecrest_client::filesystem_api::post_filesystem_transfer_upload(
405+
&client.client,
406+
"",
407+
None,
408+
PathBuf::from(""),
409+
1,
410+
),
411+
Result<UploadFileResponse>
412+
))
413+
.will_return_async(injectorpp::async_return!(
414+
Ok(UploadFileResponse {
415+
transfer_job: FirecrestFilesystemTransferModelsTransferJob {
416+
job_id: 1,
417+
..Default::default()
418+
},
419+
transfer_directives: DownloadFileResponseTransferDirectives::S3(S3TransferResponse {
420+
transfer_method: "s3".to_owned(),
421+
parts_upload_urls: Some(vec!["http://test/".to_owned()]),
422+
complete_upload_url: Some("http://complete".to_owned()),
423+
max_part_size: Some(10000),
424+
..Default::default()
425+
})
426+
}),
427+
Result<UploadFileResponse>
428+
));
429+
let result = client.transfer_upload("test", None, PathBuf::from("/test"), 100).await;
430+
assert_eq!(result.unwrap().0, 1);
431+
}
432+
433+
#[tokio::test]
434+
async fn test_transfer_download() {
435+
let client = get_client();
436+
let mut injector = InjectorPP::new();
437+
injector
438+
.when_called_async(injectorpp::async_func!(
439+
firecrest_client::filesystem_api::post_filesystem_transfer_download(
440+
&client.client,
441+
"",
442+
None,
443+
PathBuf::from(""),
444+
),
445+
Result<DownloadFileResponse>
446+
))
447+
.will_return_async(injectorpp::async_return!(
448+
Ok(DownloadFileResponse {
449+
transfer_job: FirecrestFilesystemTransferModelsTransferJob {
450+
job_id: 1,
451+
..Default::default()
452+
},
453+
transfer_directives: DownloadFileResponseTransferDirectives::S3(S3TransferResponse {
454+
transfer_method: "s3".to_owned(),
455+
download_url: Some("http://download".to_owned()),
456+
..Default::default()
457+
})
458+
}),
459+
Result<DownloadFileResponse>
460+
));
461+
let result = client.transfer_download("test", None, PathBuf::from("/test")).await;
462+
let result = result.unwrap();
463+
assert_eq!(result.0, 1);
464+
assert_eq!(result.1, Url::parse("http://download").unwrap())
465+
}
466+
}

0 commit comments

Comments
 (0)