X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Flibsystemd-network%2Ftest-dhcp-option.c;h=35db8c1c0af454b7c41c775130fe51df786461f0;hp=8659fd502556d888316838dfe0c07b2a9c536fb3;hb=d47e1de40e410ab2149918c3269038d2c264b01d;hpb=fe8db0c5ee3365a2fc80ee7ebffa238f9a0a2ae2 diff --git a/src/libsystemd-network/test-dhcp-option.c b/src/libsystemd-network/test-dhcp-option.c index 8659fd502..35db8c1c0 100644 --- a/src/libsystemd-network/test-dhcp-option.c +++ b/src/libsystemd-network/test-dhcp-option.c @@ -78,29 +78,35 @@ static void test_invalid_buffer_length(void) DHCPMessage message; assert_se(dhcp_option_parse(&message, 0, NULL, NULL) == -EINVAL); - assert_se(dhcp_option_parse(&message, sizeof(DHCPMessage), NULL, NULL) + assert_se(dhcp_option_parse(&message, sizeof(DHCPMessage) - 1, NULL, NULL) == -EINVAL); } -static void test_cookie(void) +static void test_message_init(void) { - _cleanup_free_ DHCPMessage *message; - size_t len = sizeof(DHCPMessage) + 4; - uint8_t *opt; + _cleanup_free_ DHCPMessage *message = NULL; + size_t optlen = 3; + size_t len = sizeof(DHCPMessage) + optlen; + uint8_t *opt, *magic; message = malloc0(len); opt = (uint8_t *)(message + 1); - opt[0] = 0xff; - assert_se(dhcp_option_parse(message, len, NULL, NULL) == -EINVAL); + assert_se(dhcp_message_init(message, BOOTREQUEST, 0x12345678, + DHCP_DISCOVER, &opt, &optlen) >= 0); + + assert_se(message->xid == htobe32(0x12345678)); + assert_se(message->op == BOOTREQUEST); - opt[0] = 99; - opt[1] = 130; - opt[2] = 83; - opt[3] = 99; + magic = (uint8_t*)&message->magic; - assert_se(dhcp_option_parse(message, len, NULL, NULL) == -ENOMSG); + assert_se(magic[0] == 99); + assert_se(magic[1] = 130); + assert_se(magic[2] = 83); + assert_se(magic[3] = 99); + + assert_se(dhcp_option_parse(message, len, NULL, NULL) >= 0); } static DHCPMessage *create_message(uint8_t *options, uint16_t optlen, @@ -108,19 +114,14 @@ static DHCPMessage *create_message(uint8_t *options, uint16_t optlen, uint8_t *sname, uint8_t snamelen) { DHCPMessage *message; - size_t len = sizeof(DHCPMessage) + 4 + optlen; + size_t len = sizeof(DHCPMessage) + optlen; uint8_t *opt; message = malloc0(len); opt = (uint8_t *)(message + 1); - opt[0] = 99; - opt[1] = 130; - opt[2] = 83; - opt[3] = 99; - if (options && optlen) - memcpy(&opt[4], options, optlen); + memcpy(opt, options, optlen); if (file && filelen <= 128) memcpy(&message->file, file, filelen); @@ -248,7 +249,7 @@ static void test_options(struct option_desc *desc) int filelen = 0; int snamelen = 0; int buflen = 0; - _cleanup_free_ DHCPMessage *message; + _cleanup_free_ DHCPMessage *message = NULL; int res; if (desc) { @@ -267,9 +268,9 @@ static void test_options(struct option_desc *desc) desc->pos = 0; } message = create_message(options, optlen, file, filelen, - sname, snamelen); + sname, snamelen); - buflen = sizeof(DHCPMessage) + 4 + optlen; + buflen = sizeof(DHCPMessage) + optlen; if (!desc) { assert_se((res = dhcp_option_parse(message, buflen, @@ -365,7 +366,7 @@ int main(int argc, char *argv[]) unsigned int i; test_invalid_buffer_length(); - test_cookie(); + test_message_init(); test_options(NULL);