diff options
author | Giedrius Statkevičius <giedriuswork@gmail.com> | 2020-11-11 22:45:58 +0200 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2021-02-17 15:31:29 +0900 |
commit | 68337e55f62cf49b7bdfb73dc5662e23b0ea17fa (patch) | |
tree | 494f0944d4b54579df479c6a9dd06ef0809376a3 /src/test/test-condition.c | |
parent | b1b4e9204c8260956825e2b9733c95903e215e31 (diff) | |
download | systemd-68337e55f62cf49b7bdfb73dc5662e23b0ea17fa.tar.gz |
condition: add CPUFeature
Taking a stab at implementing #14479.
Add {Condition,Assert}CPUFeature to `systemd-analyze` & friends. Implement it
by executing the CPUID instruction. Add tables for common x86/i386
features.
Tested via unit tests + checked that commands such as:
```bash
systemd-analyze condition 'AssertCPUFeature = rdrand'
```
Succeed as expected and that commands such as
```bash
systemd-analyze condition 'AssertCPUFeature = foobar'
```
Fail as expected. Finally, I have amended the `systemd.unit` manual page
with the new condition and the list of all currently supported flags.
Diffstat (limited to 'src/test/test-condition.c')
-rw-r--r-- | src/test/test-condition.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/test/test-condition.c b/src/test/test-condition.c index 15099d8df8..25483d015b 100644 --- a/src/test/test-condition.c +++ b/src/test/test-condition.c @@ -439,6 +439,27 @@ static void test_condition_test_kernel_version(void) { condition_free(condition); } +#if defined(__i386__) || defined(__x86_64__) +static void test_condition_test_cpufeature(void) { + Condition *condition; + + condition = condition_new(CONDITION_CPU_FEATURE, "fpu", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) > 0); + condition_free(condition); + + condition = condition_new(CONDITION_CPU_FEATURE, "somecpufeaturethatreallydoesntmakesense", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); + + condition = condition_new(CONDITION_CPU_FEATURE, "a", false, false); + assert_se(condition); + assert_se(condition_test(condition, environ) == 0); + condition_free(condition); +} +#endif + static void test_condition_test_security(void) { Condition *condition; @@ -864,6 +885,9 @@ int main(int argc, char *argv[]) { test_condition_test_cpus(); test_condition_test_memory(); test_condition_test_environment(); +#if defined(__i386__) || defined(__x86_64__) + test_condition_test_cpufeature(); +#endif return 0; } |