summaryrefslogtreecommitdiff
path: root/src/test/test-condition.c
diff options
context:
space:
mode:
authorGiedrius Statkevičius <giedriuswork@gmail.com>2020-11-11 22:45:58 +0200
committerYu Watanabe <watanabe.yu+github@gmail.com>2021-02-17 15:31:29 +0900
commit68337e55f62cf49b7bdfb73dc5662e23b0ea17fa (patch)
tree494f0944d4b54579df479c6a9dd06ef0809376a3 /src/test/test-condition.c
parentb1b4e9204c8260956825e2b9733c95903e215e31 (diff)
downloadsystemd-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.c24
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;
}