1 use dadk_config::common::target_arch::TargetArch;
2 use test_base::{
3 global::BaseGlobalTestContext,
4 test_context::{self as test_context, test_context},
5 };
6
7 use crate::{
8 context::{
9 DadkExecuteContextTestBuildRiscV64V1, DadkExecuteContextTestBuildX86_64V1, TestContextExt,
10 },
11 parser::Parser,
12 };
13
14 use super::*;
15
16 /// 不应在x86_64上运行仅限riscv64的任务
17 #[test_context(DadkExecuteContextTestBuildX86_64V1)]
18 #[test]
should_not_run_task_only_riscv64_on_x86_64(ctx: &DadkExecuteContextTestBuildX86_64V1)19 fn should_not_run_task_only_riscv64_on_x86_64(ctx: &DadkExecuteContextTestBuildX86_64V1) {
20 let config_file = ctx
21 .base_context()
22 .config_v2_dir()
23 .join("app_target_arch_riscv64_only_0_2_0.toml");
24 let task = Parser::new(ctx.base_context().config_v2_dir()).parse_config_file(&config_file);
25 assert!(task.is_ok(), "parse error: {:?}", task);
26 let task = task.unwrap();
27 assert!(
28 task.target_arch.len() == 1,
29 "target_arch length error: {:?}",
30 task
31 );
32 assert!(
33 task.target_arch[0] == TargetArch::RiscV64,
34 "target_arch should be riscv64: {:?}",
35 task
36 );
37
38 let scheduler = Scheduler::new(
39 ctx.execute_context().self_ref().unwrap(),
40 ctx.base_context().fake_dragonos_sysroot(),
41 *ctx.execute_context().action(),
42 vec![],
43 );
44
45 assert!(scheduler.is_ok(), "Create scheduler error: {:?}", scheduler);
46
47 let mut scheduler = scheduler.unwrap();
48
49 let entity = scheduler.add_task(config_file, task);
50 assert!(
51 entity.is_err(),
52 "Add task should return error: {:?}",
53 entity
54 );
55 }
56
57 /// 不应在riscv64上运行仅限x86_64的任务
58 #[test_context(DadkExecuteContextTestBuildRiscV64V1)]
59 #[test]
should_not_run_task_only_x86_64_on_riscv64(ctx: &DadkExecuteContextTestBuildRiscV64V1)60 fn should_not_run_task_only_x86_64_on_riscv64(ctx: &DadkExecuteContextTestBuildRiscV64V1) {
61 let config_file = ctx
62 .base_context()
63 .config_v2_dir()
64 .join("app_target_arch_x86_64_only_0_2_0.toml");
65 let task = Parser::new(ctx.base_context().config_v2_dir()).parse_config_file(&config_file);
66 assert!(task.is_ok(), "parse error: {:?}", task);
67 let task = task.unwrap();
68 assert!(
69 task.target_arch.len() == 1,
70 "target_arch length error: {:?}",
71 task
72 );
73 assert!(
74 task.target_arch[0] == TargetArch::X86_64,
75 "target_arch should be x86_64: {:?}",
76 task
77 );
78
79 let scheduler = Scheduler::new(
80 ctx.execute_context().self_ref().unwrap(),
81 ctx.base_context().fake_dragonos_sysroot(),
82 *ctx.execute_context().action(),
83 vec![],
84 );
85
86 assert!(scheduler.is_ok(), "Create scheduler error: {:?}", scheduler);
87
88 let mut scheduler = scheduler.unwrap();
89
90 let entity = scheduler.add_task(config_file, task);
91 assert!(
92 entity.is_err(),
93 "Add task should return error: {:?}",
94 entity
95 );
96 }
97
98 /// 应在x86_64上运行包含x86_64的任务
99 #[test_context(DadkExecuteContextTestBuildX86_64V1)]
100 #[test]
should_run_task_include_x86_64_on_x86_64(ctx: &DadkExecuteContextTestBuildX86_64V1)101 fn should_run_task_include_x86_64_on_x86_64(ctx: &DadkExecuteContextTestBuildX86_64V1) {
102 let config_file = ctx
103 .base_context()
104 .config_v2_dir()
105 .join("app_all_target_arch_0_2_0.toml");
106 let task = Parser::new(ctx.base_context().config_v2_dir()).parse_config_file(&config_file);
107 assert!(task.is_ok(), "parse error: {:?}", task);
108 let task = task.unwrap();
109
110 assert!(
111 task.target_arch.contains(&TargetArch::X86_64),
112 "Cannot find target_arch x86_64: {:?}",
113 task
114 );
115
116 let scheduler = Scheduler::new(
117 ctx.execute_context().self_ref().unwrap(),
118 ctx.base_context().fake_dragonos_sysroot(),
119 *ctx.execute_context().action(),
120 vec![],
121 );
122
123 assert!(scheduler.is_ok(), "Create scheduler error: {:?}", scheduler);
124
125 let mut scheduler = scheduler.unwrap();
126
127 let entity = scheduler.add_task(config_file, task);
128 assert!(entity.is_ok(), "Add task should return ok: {:?}", entity);
129 }
130
131 /// 应在riscv64上运行包含riscv64的任务
132 #[test_context(DadkExecuteContextTestBuildRiscV64V1)]
133 #[test]
should_run_task_include_riscv64_on_riscv64(ctx: &DadkExecuteContextTestBuildRiscV64V1)134 fn should_run_task_include_riscv64_on_riscv64(ctx: &DadkExecuteContextTestBuildRiscV64V1) {
135 let config_file = ctx
136 .base_context()
137 .config_v2_dir()
138 .join("app_all_target_arch_0_2_0.toml");
139 let task = Parser::new(ctx.base_context().config_v2_dir()).parse_config_file(&config_file);
140 assert!(task.is_ok(), "parse error: {:?}", task);
141 let task = task.unwrap();
142
143 assert!(
144 task.target_arch.contains(&TargetArch::RiscV64),
145 "Cannot find target_arch riscv64: {:?}",
146 task
147 );
148
149 let scheduler = Scheduler::new(
150 ctx.execute_context().self_ref().unwrap(),
151 ctx.base_context().fake_dragonos_sysroot(),
152 *ctx.execute_context().action(),
153 vec![],
154 );
155
156 assert!(scheduler.is_ok(), "Create scheduler error: {:?}", scheduler);
157
158 let mut scheduler = scheduler.unwrap();
159
160 let entity = scheduler.add_task(config_file, task);
161 assert!(entity.is_ok(), "Add task should return ok: {:?}", entity);
162 }
163
164 /// 确保文件 app_all_target_arch_0_2_0.toml 包含了所有的目标架构
165 #[test_context(BaseGlobalTestContext)]
166 #[test]
ensure_all_target_arch_testcase_v1(ctx: &BaseGlobalTestContext)167 fn ensure_all_target_arch_testcase_v1(ctx: &BaseGlobalTestContext) {
168 let config_file = ctx.config_v2_dir().join("app_all_target_arch_0_2_0.toml");
169 let task = Parser::new(ctx.config_v2_dir()).parse_config_file(&config_file);
170 assert!(task.is_ok(), "parse error: {:?}", task);
171 let task = task.unwrap();
172
173 for a in TargetArch::EXPECTED.iter() {
174 let target_arch = TargetArch::try_from(*a).unwrap();
175 assert!(
176 task.target_arch.contains(&target_arch),
177 "Cannot find target_arch '{:?}' in task: {:?}",
178 a,
179 task
180 );
181 }
182 }
183