xref: /openbmc/libpldm/tests/dsp/bios_table_iter.c (revision 860a43d996dacf98a94d62fdc7b8484ce04bde23)
148761c62SAndrew Jeffery /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
248761c62SAndrew Jeffery /* Force elision of assert() */
348761c62SAndrew Jeffery #ifndef NDEBUG
448761c62SAndrew Jeffery #define NDEBUG
548761c62SAndrew Jeffery #endif
648761c62SAndrew Jeffery 
748761c62SAndrew Jeffery #include <assert.h>
848761c62SAndrew Jeffery #include <stddef.h>
948761c62SAndrew Jeffery #include <stdint.h>
1048761c62SAndrew Jeffery #include <stdlib.h>
1148761c62SAndrew Jeffery 
12*860a43d9SAndrew Jeffery #include "compiler.h"
13*860a43d9SAndrew Jeffery 
1448761c62SAndrew Jeffery /* NOLINTNEXTLINE(bugprone-suspicious-include) */
1548761c62SAndrew Jeffery #include "dsp/bios_table.c"
1648761c62SAndrew Jeffery 
1748761c62SAndrew Jeffery /* Satisfy the symbol needs of bios_table.c */
crc32(const void * data LIBPLDM_CC_UNUSED,size_t size LIBPLDM_CC_UNUSED)18*860a43d9SAndrew Jeffery uint32_t crc32(const void* data LIBPLDM_CC_UNUSED,
19*860a43d9SAndrew Jeffery                size_t size LIBPLDM_CC_UNUSED)
2048761c62SAndrew Jeffery {
2148761c62SAndrew Jeffery     return 0;
2248761c62SAndrew Jeffery }
2348761c62SAndrew Jeffery 
2448761c62SAndrew Jeffery /* This is the non-death version of TEST(Iterator, DeathTest) */
main(void)2548761c62SAndrew Jeffery int main(void)
2648761c62SAndrew Jeffery {
2748761c62SAndrew Jeffery     struct pldm_bios_attr_table_entry entries[2] = {0};
2848761c62SAndrew Jeffery     struct pldm_bios_table_iter* iter;
2948761c62SAndrew Jeffery     int result;
3048761c62SAndrew Jeffery 
3148761c62SAndrew Jeffery     static_assert(2 * sizeof(entries[0]) == sizeof(entries), "");
3248761c62SAndrew Jeffery 
3348761c62SAndrew Jeffery     entries[0].attr_type = PLDM_BIOS_PASSWORD;
3448761c62SAndrew Jeffery     entries[1].attr_type = PLDM_BIOS_STRING_READ_ONLY;
3548761c62SAndrew Jeffery 
3648761c62SAndrew Jeffery     iter = pldm_bios_table_iter_create(entries, sizeof(entries),
3748761c62SAndrew Jeffery                                        PLDM_BIOS_ATTR_TABLE);
3848761c62SAndrew Jeffery 
3948761c62SAndrew Jeffery     /*
4048761c62SAndrew Jeffery      * We expect the test configuration to claim the iterator has reached the
419e3a5d45SManojkiran Eda      * end because the there's no entry length descriptor for the
4248761c62SAndrew Jeffery      * PLDM_BIOS_PASSWORD entry type. By the attr_able_entry_length()
4348761c62SAndrew Jeffery      * implementation this would normally trigger an assert() to uphold that the
4448761c62SAndrew Jeffery      * necessary pointers are not NULL. However, we've defined NDEBUG above and
4548761c62SAndrew Jeffery      * so the assert() is elided. That should force us down the path of the
4648761c62SAndrew Jeffery      * early-exit, which should in-turn yield a `true` result from
4748761c62SAndrew Jeffery      * pldm_bios_table_iter_is_end() to prevent further attempts to access
4848761c62SAndrew Jeffery      * invalid objects.
4948761c62SAndrew Jeffery      */
5048761c62SAndrew Jeffery     result = pldm_bios_table_iter_is_end(iter) ? EXIT_SUCCESS : EXIT_FAILURE;
5148761c62SAndrew Jeffery 
5248761c62SAndrew Jeffery     pldm_bios_table_iter_free(iter);
5348761c62SAndrew Jeffery 
5448761c62SAndrew Jeffery     exit(result);
5548761c62SAndrew Jeffery 
5648761c62SAndrew Jeffery     return 0;
5748761c62SAndrew Jeffery }
58