test_parse_dadk_user_config.rs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. use std::path::PathBuf;
  2. use dadk_config::common::target_arch::TargetArch;
  3. use dadk_user::{
  4. executor::source::{ArchiveSource, GitSource, LocalSource},
  5. parser::{
  6. task::{
  7. BuildConfig, CleanConfig, CodeSource, DADKTask, Dependency, InstallConfig,
  8. PrebuiltSource, TaskEnv, TaskType,
  9. },
  10. Parser,
  11. },
  12. };
  13. use test_base::{
  14. dadk_user::DadkUserTestContext,
  15. test_context::{self as test_context, test_context},
  16. };
  17. const DADK_USER_TEST_BUILD_LOCAL: &str = "build_from_source/test_local.toml";
  18. const DADK_USER_TEST_BUILD_GIT: &str = "build_from_source/test_git.toml";
  19. const DADK_USER_TEST_BUILD_ARCHIVE: &str = "build_from_source/test_archive.toml";
  20. const DADK_USER_TEST_INSTALL_LOCAL: &str = "install_from_prebuilt/test_local.toml";
  21. const DADK_USER_TEST_INSTALL_ARCHIVE: &str = "install_from_prebuilt/test_archive.toml";
  22. /// 测试解析DADK用户配置文件
  23. #[test_context(DadkUserTestContext)]
  24. #[test]
  25. fn test_parse_dadk_user_config_build_local(ctx: &mut DadkUserTestContext) {
  26. let config_file = ctx.templates_dir().join(DADK_USER_TEST_BUILD_LOCAL);
  27. assert!(config_file.exists());
  28. assert!(config_file.is_file());
  29. let r = Parser::parse_toml_file(&config_file);
  30. assert!(r.is_ok());
  31. let mut parsed_dadk_task = r.unwrap();
  32. let mut expected_dadk_task = DADKTask {
  33. name: "test_local".to_string(),
  34. version: "0.2.0".to_string(),
  35. description: "".to_string(),
  36. build_once: true,
  37. install_once: true,
  38. task_type: TaskType::BuildFromSource(CodeSource::Local(LocalSource::new(PathBuf::from(
  39. "apps/test",
  40. )))),
  41. rust_target: None,
  42. depends: vec![
  43. Dependency {
  44. name: "depend1".to_string(),
  45. version: "0.1.1".to_string(),
  46. },
  47. Dependency {
  48. name: "depend2".to_string(),
  49. version: "0.1.2".to_string(),
  50. },
  51. ],
  52. build: BuildConfig::new(Some("make install".to_string())),
  53. install: InstallConfig::new(Some(PathBuf::from("/bin"))),
  54. clean: CleanConfig::new(Some("make clean".to_string())),
  55. envs: Some(vec![
  56. TaskEnv::new("PATH".to_string(), "/usr/bin".to_string()),
  57. TaskEnv::new("LD_LIBRARY_PATH".to_string(), "/usr/lib".to_string()),
  58. ]),
  59. target_arch: vec![TargetArch::try_from("x86_64").unwrap()],
  60. };
  61. parsed_dadk_task.target_arch.sort();
  62. expected_dadk_task.target_arch.sort();
  63. parsed_dadk_task.depends.sort();
  64. expected_dadk_task.depends.sort();
  65. if let Some(envs) = &mut parsed_dadk_task.envs {
  66. envs.sort();
  67. }
  68. if let Some(envs) = &mut expected_dadk_task.envs {
  69. envs.sort();
  70. }
  71. assert_eq!(parsed_dadk_task, expected_dadk_task)
  72. }
  73. #[test_context(DadkUserTestContext)]
  74. #[test]
  75. fn test_parse_dadk_user_config_build_git(ctx: &mut DadkUserTestContext) {
  76. let config_file = ctx.templates_dir().join(DADK_USER_TEST_BUILD_GIT);
  77. assert!(config_file.exists());
  78. assert!(config_file.is_file());
  79. let r = Parser::parse_toml_file(&config_file);
  80. assert!(r.is_ok());
  81. let mut parsed_dadk_task = r.unwrap();
  82. let mut expected_dadk_task = DADKTask {
  83. name: "test_git".to_string(),
  84. version: "0.2.0".to_string(),
  85. description: "".to_string(),
  86. build_once: true,
  87. install_once: true,
  88. task_type: TaskType::BuildFromSource(CodeSource::Git(GitSource::new(
  89. "https://git.mirrors.dragonos.org.cn/DragonOS-Community/test_git.git".to_string(),
  90. Some("test".to_string()),
  91. Some("01cdc56863".to_string()),
  92. ))),
  93. rust_target: None,
  94. depends: vec![
  95. Dependency {
  96. name: "depend1".to_string(),
  97. version: "0.1.1".to_string(),
  98. },
  99. Dependency {
  100. name: "depend2".to_string(),
  101. version: "0.1.2".to_string(),
  102. },
  103. ],
  104. build: BuildConfig::new(Some("make install".to_string())),
  105. install: InstallConfig::new(Some(PathBuf::from("/bin"))),
  106. clean: CleanConfig::new(Some("make clean".to_string())),
  107. envs: Some(vec![
  108. TaskEnv::new("PATH".to_string(), "/usr/bin".to_string()),
  109. TaskEnv::new("LD_LIBRARY_PATH".to_string(), "/usr/lib".to_string()),
  110. ]),
  111. target_arch: vec![TargetArch::try_from("x86_64").unwrap()],
  112. };
  113. parsed_dadk_task.target_arch.sort();
  114. expected_dadk_task.target_arch.sort();
  115. parsed_dadk_task.depends.sort();
  116. expected_dadk_task.depends.sort();
  117. if let Some(envs) = &mut parsed_dadk_task.envs {
  118. envs.sort();
  119. }
  120. if let Some(envs) = &mut expected_dadk_task.envs {
  121. envs.sort();
  122. }
  123. assert_eq!(parsed_dadk_task, expected_dadk_task)
  124. }
  125. #[test_context(DadkUserTestContext)]
  126. #[test]
  127. fn test_parse_dadk_user_config_build_archive(ctx: &mut DadkUserTestContext) {
  128. let config_file = ctx.templates_dir().join(DADK_USER_TEST_BUILD_ARCHIVE);
  129. assert!(config_file.exists());
  130. assert!(config_file.is_file());
  131. let r = Parser::parse_toml_file(&config_file);
  132. assert!(r.is_ok());
  133. let mut parsed_dadk_task = r.unwrap();
  134. let mut expected_dadk_task = DADKTask {
  135. name: "test_archive".to_string(),
  136. version: "0.2.0".to_string(),
  137. description: "".to_string(),
  138. build_once: true,
  139. install_once: true,
  140. task_type: TaskType::BuildFromSource(CodeSource::Archive(ArchiveSource::new(
  141. "https://url".to_string(),
  142. ))),
  143. rust_target: None,
  144. depends: vec![
  145. Dependency {
  146. name: "depend1".to_string(),
  147. version: "0.1.1".to_string(),
  148. },
  149. Dependency {
  150. name: "depend2".to_string(),
  151. version: "0.1.2".to_string(),
  152. },
  153. ],
  154. build: BuildConfig::new(Some("make install".to_string())),
  155. install: InstallConfig::new(Some(PathBuf::from("/bin"))),
  156. clean: CleanConfig::new(Some("make clean".to_string())),
  157. envs: Some(vec![
  158. TaskEnv::new("PATH".to_string(), "/usr/bin".to_string()),
  159. TaskEnv::new("LD_LIBRARY_PATH".to_string(), "/usr/lib".to_string()),
  160. ]),
  161. target_arch: vec![TargetArch::try_from("x86_64").unwrap()],
  162. };
  163. parsed_dadk_task.target_arch.sort();
  164. expected_dadk_task.target_arch.sort();
  165. parsed_dadk_task.depends.sort();
  166. expected_dadk_task.depends.sort();
  167. if let Some(envs) = &mut parsed_dadk_task.envs {
  168. envs.sort();
  169. }
  170. if let Some(envs) = &mut expected_dadk_task.envs {
  171. envs.sort();
  172. }
  173. assert_eq!(parsed_dadk_task, expected_dadk_task)
  174. }
  175. #[test_context(DadkUserTestContext)]
  176. #[test]
  177. fn test_parse_dadk_user_config_install_local(ctx: &mut DadkUserTestContext) {
  178. let config_file = ctx.templates_dir().join(DADK_USER_TEST_INSTALL_LOCAL);
  179. assert!(config_file.exists());
  180. assert!(config_file.is_file());
  181. let r = Parser::parse_toml_file(&config_file);
  182. assert!(r.is_ok());
  183. let mut parsed_dadk_task = r.unwrap();
  184. let mut expected_dadk_task = DADKTask {
  185. name: "test_local".to_string(),
  186. version: "0.2.0".to_string(),
  187. description: "".to_string(),
  188. build_once: true,
  189. install_once: true,
  190. task_type: TaskType::InstallFromPrebuilt(PrebuiltSource::Local(LocalSource::new(
  191. PathBuf::from("/home/dev/demo"),
  192. ))),
  193. rust_target: None,
  194. depends: vec![
  195. Dependency {
  196. name: "depend1".to_string(),
  197. version: "0.1.1".to_string(),
  198. },
  199. Dependency {
  200. name: "depend2".to_string(),
  201. version: "0.1.2".to_string(),
  202. },
  203. ],
  204. build: BuildConfig::new(Some("make install".to_string())),
  205. install: InstallConfig::new(Some(PathBuf::from("/bin"))),
  206. clean: CleanConfig::new(Some("make clean".to_string())),
  207. envs: Some(vec![
  208. TaskEnv::new("PATH".to_string(), "/usr/bin".to_string()),
  209. TaskEnv::new("LD_LIBRARY_PATH".to_string(), "/usr/lib".to_string()),
  210. ]),
  211. target_arch: vec![TargetArch::try_from("x86_64").unwrap()],
  212. };
  213. parsed_dadk_task.target_arch.sort();
  214. expected_dadk_task.target_arch.sort();
  215. parsed_dadk_task.depends.sort();
  216. expected_dadk_task.depends.sort();
  217. if let Some(envs) = &mut parsed_dadk_task.envs {
  218. envs.sort();
  219. }
  220. if let Some(envs) = &mut expected_dadk_task.envs {
  221. envs.sort();
  222. }
  223. assert_eq!(parsed_dadk_task, expected_dadk_task)
  224. }
  225. #[test_context(DadkUserTestContext)]
  226. #[test]
  227. fn test_parse_dadk_user_config_install_archive(ctx: &mut DadkUserTestContext) {
  228. let config_file = ctx.templates_dir().join(DADK_USER_TEST_INSTALL_ARCHIVE);
  229. assert!(config_file.exists());
  230. assert!(config_file.is_file());
  231. let r = Parser::parse_toml_file(&config_file);
  232. assert!(r.is_ok());
  233. let mut parsed_dadk_task = r.unwrap();
  234. let mut expected_dadk_task = DADKTask {
  235. name: "test_archive".to_string(),
  236. version: "0.2.0".to_string(),
  237. description: "".to_string(),
  238. build_once: true,
  239. install_once: true,
  240. task_type: TaskType::InstallFromPrebuilt(PrebuiltSource::Archive(ArchiveSource::new(
  241. "https://url".to_string(),
  242. ))),
  243. rust_target: None,
  244. depends: vec![
  245. Dependency {
  246. name: "depend1".to_string(),
  247. version: "0.1.1".to_string(),
  248. },
  249. Dependency {
  250. name: "depend2".to_string(),
  251. version: "0.1.2".to_string(),
  252. },
  253. ],
  254. build: BuildConfig::new(Some("make install".to_string())),
  255. install: InstallConfig::new(Some(PathBuf::from("/bin"))),
  256. clean: CleanConfig::new(Some("make clean".to_string())),
  257. envs: Some(vec![
  258. TaskEnv::new("PATH".to_string(), "/usr/bin".to_string()),
  259. TaskEnv::new("LD_LIBRARY_PATH".to_string(), "/usr/lib".to_string()),
  260. ]),
  261. target_arch: vec![TargetArch::try_from("x86_64").unwrap()],
  262. };
  263. parsed_dadk_task.target_arch.sort();
  264. expected_dadk_task.target_arch.sort();
  265. parsed_dadk_task.depends.sort();
  266. expected_dadk_task.depends.sort();
  267. if let Some(envs) = &mut parsed_dadk_task.envs {
  268. envs.sort();
  269. }
  270. if let Some(envs) = &mut expected_dadk_task.envs {
  271. envs.sort();
  272. }
  273. assert_eq!(parsed_dadk_task, expected_dadk_task)
  274. }