// Copyright (c) 2022 Johannes Stoelp #include #include #include TEST(option, get_available_opt) { u8 opts[] = { into_raw(dhcp_option::PAD), into_raw(dhcp_option::PAD), into_raw(dhcp_option::DHCP_MESSAGE_TYPE), 5 /* len */, 0, 1, 2, 3, 4, into_raw(dhcp_option::END), }; auto ov = get_option(opts, sizeof(opts), dhcp_option::DHCP_MESSAGE_TYPE); ASSERT_EQ(true, ov.has_value()); ASSERT_EQ(0, ov.value().data[0]); ASSERT_EQ(1, ov.value().data[1]); ASSERT_EQ(2, ov.value().data[2]); ASSERT_EQ(3, ov.value().data[3]); ASSERT_EQ(4, ov.value().data[4]); ASSERT_EQ(5, ov.value().len); } TEST(option, maleformed_len) { u8 opts[] = { into_raw(dhcp_option::PAD), into_raw(dhcp_option::PAD), into_raw(dhcp_option::DHCP_MESSAGE_TYPE), 5 /* len */, 0, into_raw(dhcp_option::END), }; { auto ov = get_option(opts, sizeof(opts), dhcp_option::DHCP_MESSAGE_TYPE); ASSERT_EQ(false, ov.has_value()); } { auto ov = get_option(opts, sizeof(opts), dhcp_option::CLASS_ID); ASSERT_EQ(false, ov.has_value()); } } TEST(option, maleformed_missing_end) { u8 opts[] = { into_raw(dhcp_option::PAD), into_raw(dhcp_option::PAD), }; auto ov = get_option(opts, sizeof(opts), dhcp_option::DHCP_MESSAGE_TYPE); ASSERT_EQ(false, ov.has_value()); } TEST(option, put_opt_val) { u8 options[8] = {0}; u32 val = 0xdeadbeef; u8* nextp = put_opt_val(options, val); ASSERT_EQ(options + 4, nextp); ASSERT_EQ(0xde, options[0]); ASSERT_EQ(0xad, options[1]); ASSERT_EQ(0xbe, options[2]); ASSERT_EQ(0xef, options[3]); }