qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

fw_cfg-test.c (6545B)


      1 /*
      2  * qtest fw_cfg test case
      3  *
      4  * Copyright IBM, Corp. 2012-2013
      5  *
      6  * Authors:
      7  *  Anthony Liguori   <aliguori@us.ibm.com>
      8  *
      9  * This work is licensed under the terms of the GNU GPL, version 2 or later.
     10  * See the COPYING file in the top-level directory.
     11  */
     12 
     13 #include "qemu/osdep.h"
     14 
     15 #include "libqtest.h"
     16 #include "standard-headers/linux/qemu_fw_cfg.h"
     17 #include "libqos/fw_cfg.h"
     18 #include "qemu/bswap.h"
     19 
     20 static uint64_t ram_size = 128 << 20;
     21 static uint16_t nb_cpus = 1;
     22 static uint16_t max_cpus = 1;
     23 static uint64_t nb_nodes = 0;
     24 static uint16_t boot_menu = 0;
     25 
     26 static void test_fw_cfg_signature(void)
     27 {
     28     QFWCFG *fw_cfg;
     29     QTestState *s;
     30     char buf[5];
     31 
     32     s = qtest_init("");
     33     fw_cfg = pc_fw_cfg_init(s);
     34 
     35     qfw_cfg_get(fw_cfg, FW_CFG_SIGNATURE, buf, 4);
     36     buf[4] = 0;
     37 
     38     g_assert_cmpstr(buf, ==, "QEMU");
     39     pc_fw_cfg_uninit(fw_cfg);
     40     qtest_quit(s);
     41 }
     42 
     43 static void test_fw_cfg_id(void)
     44 {
     45     QFWCFG *fw_cfg;
     46     QTestState *s;
     47     uint32_t id;
     48 
     49     s = qtest_init("");
     50     fw_cfg = pc_fw_cfg_init(s);
     51 
     52     id = qfw_cfg_get_u32(fw_cfg, FW_CFG_ID);
     53     g_assert((id == 1) ||
     54              (id == 3));
     55     pc_fw_cfg_uninit(fw_cfg);
     56     qtest_quit(s);
     57 }
     58 
     59 static void test_fw_cfg_uuid(void)
     60 {
     61     QFWCFG *fw_cfg;
     62     QTestState *s;
     63 
     64     uint8_t buf[16];
     65     static const uint8_t uuid[16] = {
     66         0x46, 0x00, 0xcb, 0x32, 0x38, 0xec, 0x4b, 0x2f,
     67         0x8a, 0xcb, 0x81, 0xc6, 0xea, 0x54, 0xf2, 0xd8,
     68     };
     69 
     70     s = qtest_init("-uuid 4600cb32-38ec-4b2f-8acb-81c6ea54f2d8");
     71     fw_cfg = pc_fw_cfg_init(s);
     72 
     73     qfw_cfg_get(fw_cfg, FW_CFG_UUID, buf, 16);
     74     g_assert(memcmp(buf, uuid, sizeof(buf)) == 0);
     75 
     76     pc_fw_cfg_uninit(fw_cfg);
     77     qtest_quit(s);
     78 
     79 }
     80 
     81 static void test_fw_cfg_ram_size(void)
     82 {
     83     QFWCFG *fw_cfg;
     84     QTestState *s;
     85 
     86     s = qtest_init("");
     87     fw_cfg = pc_fw_cfg_init(s);
     88 
     89     g_assert_cmpint(qfw_cfg_get_u64(fw_cfg, FW_CFG_RAM_SIZE), ==, ram_size);
     90 
     91     pc_fw_cfg_uninit(fw_cfg);
     92     qtest_quit(s);
     93 }
     94 
     95 static void test_fw_cfg_nographic(void)
     96 {
     97     QFWCFG *fw_cfg;
     98     QTestState *s;
     99 
    100     s = qtest_init("");
    101     fw_cfg = pc_fw_cfg_init(s);
    102 
    103     g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_NOGRAPHIC), ==, 0);
    104 
    105     pc_fw_cfg_uninit(fw_cfg);
    106     qtest_quit(s);
    107 }
    108 
    109 static void test_fw_cfg_nb_cpus(void)
    110 {
    111     QFWCFG *fw_cfg;
    112     QTestState *s;
    113 
    114     s = qtest_init("");
    115     fw_cfg = pc_fw_cfg_init(s);
    116 
    117     g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_NB_CPUS), ==, nb_cpus);
    118 
    119     pc_fw_cfg_uninit(fw_cfg);
    120     qtest_quit(s);
    121 }
    122 
    123 static void test_fw_cfg_max_cpus(void)
    124 {
    125     QFWCFG *fw_cfg;
    126     QTestState *s;
    127 
    128     s = qtest_init("");
    129     fw_cfg = pc_fw_cfg_init(s);
    130 
    131     g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_MAX_CPUS), ==, max_cpus);
    132     pc_fw_cfg_uninit(fw_cfg);
    133     qtest_quit(s);
    134 }
    135 
    136 static void test_fw_cfg_numa(void)
    137 {
    138     QFWCFG *fw_cfg;
    139     QTestState *s;
    140     uint64_t *cpu_mask;
    141     uint64_t *node_mask;
    142 
    143     s = qtest_init("");
    144     fw_cfg = pc_fw_cfg_init(s);
    145 
    146     g_assert_cmpint(qfw_cfg_get_u64(fw_cfg, FW_CFG_NUMA), ==, nb_nodes);
    147 
    148     cpu_mask = g_new0(uint64_t, max_cpus);
    149     node_mask = g_new0(uint64_t, nb_nodes);
    150 
    151     qfw_cfg_read_data(fw_cfg, cpu_mask, sizeof(uint64_t) * max_cpus);
    152     qfw_cfg_read_data(fw_cfg, node_mask, sizeof(uint64_t) * nb_nodes);
    153 
    154     if (nb_nodes) {
    155         g_assert(cpu_mask[0] & 0x01);
    156         g_assert_cmpint(node_mask[0], ==, ram_size);
    157     }
    158 
    159     g_free(node_mask);
    160     g_free(cpu_mask);
    161     pc_fw_cfg_uninit(fw_cfg);
    162     qtest_quit(s);
    163 }
    164 
    165 static void test_fw_cfg_boot_menu(void)
    166 {
    167     QFWCFG *fw_cfg;
    168     QTestState *s;
    169 
    170     s = qtest_init("");
    171     fw_cfg = pc_fw_cfg_init(s);
    172 
    173     g_assert_cmpint(qfw_cfg_get_u16(fw_cfg, FW_CFG_BOOT_MENU), ==, boot_menu);
    174     pc_fw_cfg_uninit(fw_cfg);
    175     qtest_quit(s);
    176 }
    177 
    178 static void test_fw_cfg_reboot_timeout(void)
    179 {
    180     QFWCFG *fw_cfg;
    181     QTestState *s;
    182     uint32_t reboot_timeout = 0;
    183     size_t filesize;
    184 
    185     s = qtest_init("-boot reboot-timeout=15");
    186     fw_cfg = pc_fw_cfg_init(s);
    187 
    188     filesize = qfw_cfg_get_file(fw_cfg, "etc/boot-fail-wait",
    189                                 &reboot_timeout, sizeof(reboot_timeout));
    190     g_assert_cmpint(filesize, ==, sizeof(reboot_timeout));
    191     reboot_timeout = le32_to_cpu(reboot_timeout);
    192     g_assert_cmpint(reboot_timeout, ==, 15);
    193     pc_fw_cfg_uninit(fw_cfg);
    194     qtest_quit(s);
    195 }
    196 
    197 static void test_fw_cfg_no_reboot_timeout(void)
    198 {
    199     QFWCFG *fw_cfg;
    200     QTestState *s;
    201     uint32_t reboot_timeout = 0;
    202     size_t filesize;
    203 
    204     /* Special value -1 means "don't reboot" */
    205     s = qtest_init("-boot reboot-timeout=-1");
    206     fw_cfg = pc_fw_cfg_init(s);
    207 
    208     filesize = qfw_cfg_get_file(fw_cfg, "etc/boot-fail-wait",
    209                                 &reboot_timeout, sizeof(reboot_timeout));
    210     g_assert_cmpint(filesize, ==, sizeof(reboot_timeout));
    211     reboot_timeout = le32_to_cpu(reboot_timeout);
    212     g_assert_cmpint(reboot_timeout, ==, UINT32_MAX);
    213     pc_fw_cfg_uninit(fw_cfg);
    214     qtest_quit(s);
    215 }
    216 
    217 static void test_fw_cfg_splash_time(void)
    218 {
    219     QFWCFG *fw_cfg;
    220     QTestState *s;
    221     uint16_t splash_time = 0;
    222     size_t filesize;
    223 
    224     s = qtest_init("-boot splash-time=12");
    225     fw_cfg = pc_fw_cfg_init(s);
    226 
    227     filesize = qfw_cfg_get_file(fw_cfg, "etc/boot-menu-wait",
    228                                 &splash_time, sizeof(splash_time));
    229     g_assert_cmpint(filesize, ==, sizeof(splash_time));
    230     splash_time = le16_to_cpu(splash_time);
    231     g_assert_cmpint(splash_time, ==, 12);
    232     pc_fw_cfg_uninit(fw_cfg);
    233     qtest_quit(s);
    234 }
    235 
    236 int main(int argc, char **argv)
    237 {
    238     g_test_init(&argc, &argv, NULL);
    239 
    240     qtest_add_func("fw_cfg/signature", test_fw_cfg_signature);
    241     qtest_add_func("fw_cfg/id", test_fw_cfg_id);
    242     qtest_add_func("fw_cfg/uuid", test_fw_cfg_uuid);
    243     qtest_add_func("fw_cfg/ram_size", test_fw_cfg_ram_size);
    244     qtest_add_func("fw_cfg/nographic", test_fw_cfg_nographic);
    245     qtest_add_func("fw_cfg/nb_cpus", test_fw_cfg_nb_cpus);
    246 #if 0
    247     qtest_add_func("fw_cfg/machine_id", test_fw_cfg_machine_id);
    248     qtest_add_func("fw_cfg/kernel", test_fw_cfg_kernel);
    249     qtest_add_func("fw_cfg/initrd", test_fw_cfg_initrd);
    250     qtest_add_func("fw_cfg/boot_device", test_fw_cfg_boot_device);
    251 #endif
    252     qtest_add_func("fw_cfg/max_cpus", test_fw_cfg_max_cpus);
    253     qtest_add_func("fw_cfg/numa", test_fw_cfg_numa);
    254     qtest_add_func("fw_cfg/boot_menu", test_fw_cfg_boot_menu);
    255     qtest_add_func("fw_cfg/reboot_timeout", test_fw_cfg_reboot_timeout);
    256     qtest_add_func("fw_cfg/no_reboot_timeout", test_fw_cfg_no_reboot_timeout);
    257     qtest_add_func("fw_cfg/splash_time", test_fw_cfg_splash_time);
    258 
    259     return g_test_run();
    260 }