1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Tests for hash command
4  *
5  * Copyright 2024, Heinrich Schuchardt <heinrich.schuchardt@canoncal.com>
6  */
7 
8 #include <command.h>
9 #include <env.h>
10 #include <dm.h>
11 #include <dm/test.h>
12 #include <test/test.h>
13 #include <test/ut.h>
14 
dm_test_cmd_hash_md5(struct unit_test_state * uts)15 static int dm_test_cmd_hash_md5(struct unit_test_state *uts)
16 {
17 	if (!CONFIG_IS_ENABLED(MD5)) {
18 		ut_assert(run_command("hash md5 $loadaddr 0", 0));
19 
20 		return 0;
21 	}
22 
23 	ut_assertok(run_command("hash md5 $loadaddr 0", 0));
24 	console_record_readline(uts->actual_str, sizeof(uts->actual_str));
25 	ut_asserteq_ptr(uts->actual_str,
26 			strstr(uts->actual_str, "md5 for "));
27 	ut_assert(strstr(uts->actual_str,
28 			 "d41d8cd98f00b204e9800998ecf8427e"));
29 	ut_assert_console_end();
30 
31 	ut_assertok(run_command("hash md5 $loadaddr 0 foo; echo $foo", 0));
32 	console_record_readline(uts->actual_str, sizeof(uts->actual_str));
33 	ut_asserteq_ptr(uts->actual_str,
34 			strstr(uts->actual_str, "md5 for "));
35 	ut_assert(strstr(uts->actual_str,
36 			 "d41d8cd98f00b204e9800998ecf8427e"));
37 	ut_assertok(ut_check_console_line(uts,
38 					  "d41d8cd98f00b204e9800998ecf8427e"));
39 
40 	if (!CONFIG_IS_ENABLED(HASH_VERIFY)) {
41 		ut_assert(run_command("hash -v sha256 $loadaddr 0 foo", 0));
42 		ut_assertok(ut_check_console_line(
43 				uts, "hash - compute hash message digest"));
44 
45 		return 0;
46 	}
47 
48 	ut_assertok(run_command("hash -v md5 $loadaddr 0 foo", 0));
49 	ut_assert_console_end();
50 
51 	env_set("foo", "ffffffffffffffffffffffffffffffff");
52 	ut_assert(run_command("hash -v md5 $loadaddr 0 foo", 0));
53 	console_record_readline(uts->actual_str, sizeof(uts->actual_str));
54 	ut_assert(strstr(uts->actual_str, "!="));
55 	ut_assert_console_end();
56 
57 	return 0;
58 }
59 DM_TEST(dm_test_cmd_hash_md5, UTF_CONSOLE);
60 
dm_test_cmd_hash_sha256(struct unit_test_state * uts)61 static int dm_test_cmd_hash_sha256(struct unit_test_state *uts)
62 {
63 	if (!CONFIG_IS_ENABLED(SHA256)) {
64 		ut_assert(run_command("hash sha256 $loadaddr 0", 0));
65 
66 		return 0;
67 	}
68 
69 	ut_assertok(run_command("hash sha256 $loadaddr 0", 0));
70 	console_record_readline(uts->actual_str, sizeof(uts->actual_str));
71 	ut_asserteq_ptr(uts->actual_str,
72 			strstr(uts->actual_str, "sha256 for "));
73 	ut_assert(strstr(uts->actual_str,
74 			 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
75 	ut_assert_console_end();
76 
77 	ut_assertok(run_command("hash sha256 $loadaddr 0 foo; echo $foo", 0));
78 	console_record_readline(uts->actual_str, sizeof(uts->actual_str));
79 	ut_asserteq_ptr(uts->actual_str,
80 			strstr(uts->actual_str, "sha256 for "));
81 	ut_assert(strstr(uts->actual_str,
82 			 "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
83 	ut_assertok(ut_check_console_line(
84 			uts, "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"));
85 
86 	if (!CONFIG_IS_ENABLED(HASH_VERIFY)) {
87 		ut_assert(run_command("hash -v sha256 $loadaddr 0 foo", 0));
88 		ut_assertok(ut_check_console_line(
89 				uts, "hash - compute hash message digest"));
90 
91 		return 0;
92 	}
93 
94 	ut_assertok(run_command("hash -v sha256 $loadaddr 0 foo", 0));
95 	ut_assert_console_end();
96 
97 	env_set("foo", "ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff");
98 	ut_assert(run_command("hash -v sha256 $loadaddr 0 foo", 0));
99 	console_record_readline(uts->actual_str, sizeof(uts->actual_str));
100 	ut_assert(strstr(uts->actual_str, "!="));
101 	ut_assert_console_end();
102 
103 	return 0;
104 }
105 DM_TEST(dm_test_cmd_hash_sha256, UTF_CONSOLE);
106