@@ -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