]> Git Repo - J-u-boot.git/blob - test/boot/bootmeth.c
ae216293d649cb14c5a51bd27c381d818ddc7303
[J-u-boot.git] / test / boot / bootmeth.c
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Test for bootdev functions. All start with 'bootmeth'
4  *
5  * Copyright 2021 Google LLC
6  * Written by Simon Glass <[email protected]>
7  */
8
9 #include <common.h>
10 #include <bootmeth.h>
11 #include <bootstd.h>
12 #include <dm.h>
13 #include <test/suites.h>
14 #include <test/ut.h>
15 #include "bootstd_common.h"
16
17 /* Check 'bootmeth list' command */
18 static int bootmeth_cmd_list(struct unit_test_state *uts)
19 {
20         console_record_reset_enable();
21         ut_assertok(run_command("bootmeth list", 0));
22         ut_assert_nextline("Order  Seq  Name                Description");
23         ut_assert_nextlinen("---");
24         ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device");
25         ut_assert_nextline("    1    1  efi                 EFI boot from an .efi file");
26         ut_assert_nextline(" glob    2  firmware0           VBE simple");
27         ut_assert_nextlinen("---");
28         ut_assert_nextline("(3 bootmeths)");
29         ut_assert_console_end();
30
31         return 0;
32 }
33 BOOTSTD_TEST(bootmeth_cmd_list, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
34
35 /* Check 'bootmeth order' command */
36 static int bootmeth_cmd_order(struct unit_test_state *uts)
37 {
38         /* Select just one bootmethod */
39         console_record_reset_enable();
40         ut_assertok(run_command("bootmeth order syslinux", 0));
41         ut_assert_console_end();
42         ut_assertnonnull(env_get("bootmeths"));
43         ut_asserteq_str("syslinux", env_get("bootmeths"));
44
45         /* Only that one should be listed */
46         ut_assertok(run_command("bootmeth list", 0));
47         ut_assert_nextline("Order  Seq  Name                Description");
48         ut_assert_nextlinen("---");
49         ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device");
50         ut_assert_nextlinen("---");
51         ut_assert_nextline("(1 bootmeth)");
52         ut_assert_console_end();
53
54         /* Check the -a flag, efi should show as not in the order ("-") */
55         ut_assertok(run_command("bootmeth list -a", 0));
56         ut_assert_nextline("Order  Seq  Name                Description");
57         ut_assert_nextlinen("---");
58         ut_assert_nextline("    0    0  syslinux            Syslinux boot from a block device");
59         ut_assert_nextline("    -    1  efi                 EFI boot from an .efi file");
60         ut_assert_nextline(" glob    2  firmware0           VBE simple");
61         ut_assert_nextlinen("---");
62         ut_assert_nextline("(3 bootmeths)");
63         ut_assert_console_end();
64
65         /* Check the -a flag with the reverse order */
66         ut_assertok(run_command("bootmeth order \"efi syslinux\"", 0));
67         ut_assert_console_end();
68         ut_assertok(run_command("bootmeth list -a", 0));
69         ut_assert_nextline("Order  Seq  Name                Description");
70         ut_assert_nextlinen("---");
71         ut_assert_nextline("    1    0  syslinux            Syslinux boot from a block device");
72         ut_assert_nextline("    0    1  efi                 EFI boot from an .efi file");
73         ut_assert_nextline(" glob    2  firmware0           VBE simple");
74         ut_assert_nextlinen("---");
75         ut_assert_nextline("(3 bootmeths)");
76         ut_assert_console_end();
77
78         /* Now reset the order to empty, which should show all of them again */
79         ut_assertok(run_command("bootmeth order", 0));
80         ut_assert_console_end();
81         ut_assertnull(env_get("bootmeths"));
82         ut_assertok(run_command("bootmeth list", 0));
83         ut_assert_skip_to_line("(3 bootmeths)");
84
85         /* Try reverse order */
86         ut_assertok(run_command("bootmeth order \"efi syslinux\"", 0));
87         ut_assert_console_end();
88         ut_assertok(run_command("bootmeth list", 0));
89         ut_assert_nextline("Order  Seq  Name                Description");
90         ut_assert_nextlinen("---");
91         ut_assert_nextline("    0    1  efi                 EFI boot from an .efi file");
92         ut_assert_nextline("    1    0  syslinux            Syslinux boot from a block device");
93         ut_assert_nextlinen("---");
94         ut_assert_nextline("(2 bootmeths)");
95         ut_assertnonnull(env_get("bootmeths"));
96         ut_asserteq_str("efi syslinux", env_get("bootmeths"));
97         ut_assert_console_end();
98
99         /* Try with global bootmeths */
100         ut_assertok(run_command("bootmeth order \"efi firmware0\"", 0));
101         ut_assert_console_end();
102         ut_assertok(run_command("bootmeth list", 0));
103         ut_assert_nextline("Order  Seq  Name                Description");
104         ut_assert_nextlinen("---");
105         ut_assert_nextline("    0    1  efi                 EFI boot from an .efi file");
106         ut_assert_nextline(" glob    2  firmware0           VBE simple");
107         ut_assert_nextlinen("---");
108         ut_assert_nextline("(2 bootmeths)");
109         ut_assertnonnull(env_get("bootmeths"));
110         ut_asserteq_str("efi firmware0", env_get("bootmeths"));
111         ut_assert_console_end();
112
113         return 0;
114 }
115 BOOTSTD_TEST(bootmeth_cmd_order, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
116
117 /* Check 'bootmeths' env var */
118 static int bootmeth_env(struct unit_test_state *uts)
119 {
120         struct bootstd_priv *std;
121
122         ut_assertok(bootstd_get_priv(&std));
123
124         /* Select just one bootmethod */
125         console_record_reset_enable();
126         ut_assertok(env_set("bootmeths", "syslinux"));
127         ut_asserteq(1, std->bootmeth_count);
128
129         /* Select an invalid bootmethod */
130         ut_asserteq(1, run_command("setenv bootmeths fred", 0));
131         ut_assert_nextline("Unknown bootmeth 'fred'");
132         ut_assert_nextlinen("## Error inserting");
133         ut_assert_console_end();
134
135         ut_assertok(env_set("bootmeths", "efi syslinux"));
136         ut_asserteq(2, std->bootmeth_count);
137         ut_assert_console_end();
138
139         return 0;
140 }
141 BOOTSTD_TEST(bootmeth_env, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
142
143 /* Check the get_state_desc() method */
144 static int bootmeth_state(struct unit_test_state *uts)
145 {
146         struct udevice *dev;
147         char buf[50];
148
149         ut_assertok(uclass_first_device(UCLASS_BOOTMETH, &dev));
150         ut_assertnonnull(dev);
151
152         ut_assertok(bootmeth_get_state_desc(dev, buf, sizeof(buf)));
153         ut_asserteq_str("OK", buf);
154
155         return 0;
156 }
157 BOOTSTD_TEST(bootmeth_state, UT_TESTF_DM | UT_TESTF_SCAN_FDT);
This page took 0.024493 seconds and 2 git commands to generate.