test_parse_dadk_user_config.rs 10 KB

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