tests.rs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. use std::path::PathBuf;
  2. use test_base::test_context::{self as test_context, test_context};
  3. use crate::{
  4. context::{
  5. DadkExecuteContextTestBuildRiscV64V1, DadkExecuteContextTestBuildX86_64V1, TestContextExt,
  6. },
  7. executor::Executor,
  8. parser::Parser,
  9. scheduler::{SchedEntities, Scheduler},
  10. };
  11. use super::create_global_env_list;
  12. fn setup_executor<T: TestContextExt>(config_file: PathBuf, ctx: &T) -> Executor {
  13. let task = Parser::new(ctx.base_context().config_v1_dir()).parse_config_file(&config_file);
  14. assert!(task.is_ok(), "parse error: {:?}", task);
  15. let scheduler = Scheduler::new(
  16. ctx.execute_context().self_ref().unwrap(),
  17. ctx.base_context().fake_dragonos_sysroot(),
  18. *ctx.execute_context().action(),
  19. vec![],
  20. );
  21. assert!(scheduler.is_ok(), "Create scheduler error: {:?}", scheduler);
  22. let mut scheduler = scheduler.unwrap();
  23. let entity = scheduler.add_task(config_file, task.unwrap());
  24. assert!(entity.is_ok(), "Add task error: {:?}", entity);
  25. let entity = entity.unwrap();
  26. let executor = Executor::new(
  27. entity.clone(),
  28. *ctx.execute_context().action(),
  29. ctx.base_context().fake_dragonos_sysroot(),
  30. );
  31. assert!(executor.is_ok(), "Create executor error: {:?}", executor);
  32. let executor = executor.unwrap();
  33. return executor;
  34. }
  35. /// 测试能否正确设置本地环境变量
  36. #[test_context(DadkExecuteContextTestBuildX86_64V1)]
  37. #[test]
  38. fn set_local_env(ctx: &DadkExecuteContextTestBuildX86_64V1) {
  39. let config_file_path = ctx
  40. .base_context()
  41. .config_v1_dir()
  42. .join("app_normal_with_env_0_1_0.dadk");
  43. let mut executor = setup_executor(config_file_path, ctx);
  44. let r = executor.prepare_local_env();
  45. assert!(r.is_ok(), "Prepare local env error: {:?}", r);
  46. assert_ne!(executor.local_envs.envs.len(), 0);
  47. assert!(executor.local_envs.get("DADK_CURRENT_BUILD_DIR").is_some());
  48. assert!(executor.local_envs.get("CC").is_some());
  49. assert_eq!(executor.local_envs.get("CC").unwrap().value, "abc-gcc");
  50. let x = executor.execute();
  51. assert!(x.is_ok(), "Execute error: {:?}", x);
  52. }
  53. /// 测试执行错误时,能否感知到错误
  54. #[test_context(DadkExecuteContextTestBuildX86_64V1)]
  55. #[test]
  56. fn execute_should_capture_error(ctx: &DadkExecuteContextTestBuildX86_64V1) {
  57. let config_file_path = ctx
  58. .base_context()
  59. .config_v1_dir()
  60. .join("app_normal_with_env_fail_0_1_0.dadk");
  61. let mut executor = setup_executor(config_file_path, ctx);
  62. let r = executor.prepare_local_env();
  63. assert!(r.is_ok(), "Prepare local env error: {:?}", r);
  64. assert_ne!(executor.local_envs.envs.len(), 0);
  65. assert!(executor.local_envs.get("DADK_CURRENT_BUILD_DIR").is_some());
  66. assert!(executor.local_envs.get("CC").is_some());
  67. assert_eq!(executor.local_envs.get("CC").unwrap().value, "abc-gcc1");
  68. let x = executor.execute();
  69. assert!(x.is_err(), "Executor cannot catch error when build error");
  70. }
  71. /// 测试能否正确设置ARCH全局环境变量为x86_64
  72. #[test_context(DadkExecuteContextTestBuildX86_64V1)]
  73. #[test]
  74. fn check_arch_env_x86_64(ctx: &DadkExecuteContextTestBuildX86_64V1) {
  75. let entities = SchedEntities::new();
  76. let env_list = create_global_env_list(&entities, &ctx.execute_context().self_ref().unwrap());
  77. assert!(
  78. env_list.is_ok(),
  79. "Create global env list error: {:?}",
  80. env_list
  81. );
  82. let env_list = env_list.unwrap();
  83. assert!(env_list.get("ARCH").is_some());
  84. assert_eq!(env_list.get("ARCH").unwrap().value, "x86_64");
  85. }
  86. /// 测试能否正确设置ARCH全局环境变量为riscv64
  87. #[test_context(DadkExecuteContextTestBuildRiscV64V1)]
  88. #[test]
  89. fn check_arch_env_riscv64(ctx: &DadkExecuteContextTestBuildRiscV64V1) {
  90. let entities = SchedEntities::new();
  91. let env_list = create_global_env_list(&entities, &ctx.execute_context().self_ref().unwrap());
  92. assert!(
  93. env_list.is_ok(),
  94. "Create global env list error: {:?}",
  95. env_list
  96. );
  97. let env_list = env_list.unwrap();
  98. assert!(env_list.get("ARCH").is_some());
  99. assert_eq!(env_list.get("ARCH").unwrap().value, "riscv64");
  100. }