unit-tests: Updated asn1-parser tests
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2014 Andreas Steffen
|
* Copyright (C) 2014-2017 Andreas Steffen
|
||||||
* HSR Hochschule fuer Technik Rapperswil
|
* HSR Hochschule fuer Technik Rapperswil
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
@@ -250,6 +250,7 @@ START_TEST(test_asn1_parser_option)
|
|||||||
i3 = *object.ptr;
|
i3 = *object.ptr;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -264,6 +265,105 @@ START_TEST(test_asn1_parser_option)
|
|||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* choice
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
int i1, i2, i3, i4;
|
||||||
|
chunk_t blob;
|
||||||
|
} choice_test_t;
|
||||||
|
|
||||||
|
static const asn1Object_t choiceObjects[] = {
|
||||||
|
{ 0, "choiceObject", ASN1_EOC, ASN1_CHOICE }, /* 0 */
|
||||||
|
{ 1, "choiceA", ASN1_CONTEXT_C_0, ASN1_OPT|ASN1_CHOICE }, /* 1 */
|
||||||
|
{ 2, "choice1", ASN1_OCTET_STRING, ASN1_OPT|ASN1_BODY }, /* 2 */
|
||||||
|
{ 2, "end choice1", ASN1_EOC, ASN1_END|ASN1_CH }, /* 3 */
|
||||||
|
{ 2, "choice2", ASN1_INTEGER, ASN1_OPT|ASN1_BODY }, /* 4 */
|
||||||
|
{ 2, "end choice2", ASN1_EOC, ASN1_END|ASN1_CH }, /* 5 */
|
||||||
|
{ 1, "end choiceA", ASN1_EOC, ASN1_END|ASN1_CHOICE|
|
||||||
|
ASN1_CH }, /* 6 */
|
||||||
|
{ 1, "choiceB", ASN1_SEQUENCE, ASN1_OPT|ASN1_LOOP }, /* 7 */
|
||||||
|
{ 2, "choiceObject", ASN1_EOC, ASN1_CHOICE }, /* 8 */
|
||||||
|
{ 3, "choice3", ASN1_INTEGER, ASN1_OPT|ASN1_BODY }, /* 9 */
|
||||||
|
{ 3, "end choice3", ASN1_EOC, ASN1_END|ASN1_CH }, /* 10 */
|
||||||
|
{ 3, "choice4", ASN1_OCTET_STRING, ASN1_OPT|ASN1_BODY }, /* 11 */
|
||||||
|
{ 3, "end choice4", ASN1_EOC, ASN1_END|ASN1_CH }, /* 12 */
|
||||||
|
{ 2, "end choices", ASN1_EOC, ASN1_END|ASN1_CHOICE }, /* 13 */
|
||||||
|
{ 1, "end loop/choice", ASN1_EOC, ASN1_END|ASN1_CH }, /* 14 */
|
||||||
|
{ 0, "end choices", ASN1_EOC, ASN1_END|ASN1_CHOICE }, /* 15 */
|
||||||
|
{ 0, "exit", ASN1_EOC, ASN1_EXIT }
|
||||||
|
};
|
||||||
|
|
||||||
|
choice_test_t choice_tests[] = {
|
||||||
|
{ 0, 0, 0, 0, { NULL, 0 } },
|
||||||
|
{ 0, 0, 0, 0, chunk_from_chars(0xA0, 0x00) },
|
||||||
|
{ 1, 0, 0, 0, chunk_from_chars(0xA0, 0x03, 0x04, 0x01, 0x01) },
|
||||||
|
{ 1, 0, 0, 0, chunk_from_chars(0xA0, 0x06, 0x04, 0x01, 0x01,
|
||||||
|
0x02, 0x01, 0x02) },
|
||||||
|
{ 0, 2, 0, 0, chunk_from_chars(0xA0, 0x03, 0x02, 0x01, 0x02) },
|
||||||
|
{ 0, 2, 0, 0, chunk_from_chars(0xA0, 0x03, 0x02, 0x01, 0x02,
|
||||||
|
0x30, 0x03, 0x02, 0x01, 0x03) },
|
||||||
|
{ 0, 0, 0, 0, chunk_from_chars(0xA0, 0x04, 0x03, 0x02, 0x00, 0x04) },
|
||||||
|
{ 0, 0, 3, 0, chunk_from_chars(0x30, 0x03, 0x02, 0x01, 0x03) },
|
||||||
|
{ 0, 0, 0, 4, chunk_from_chars(0x30, 0x03, 0x04, 0x01, 0x04) },
|
||||||
|
{ 0, 0, 3, 4, chunk_from_chars(0x30, 0x06, 0x04, 0x01, 0x04,
|
||||||
|
0x02, 0x01, 0x03) },
|
||||||
|
{ 0, 0, 3, 4, chunk_from_chars(0x30, 0x06, 0x02, 0x01, 0x03,
|
||||||
|
0x04, 0x01, 0x04) },
|
||||||
|
{ 0, 0, 6, 0, chunk_from_chars(0x30, 0x06, 0x02, 0x01, 0x03,
|
||||||
|
0x02, 0x01, 0x03) },
|
||||||
|
{ 0, 0, 0, 8, chunk_from_chars(0x30, 0x06, 0x04, 0x01, 0x04,
|
||||||
|
0x04, 0x01, 0x04) },
|
||||||
|
{ 0, 0, 0, 0, chunk_from_chars(0x30, 0x04, 0x03, 0x02, 0x00, 0x04) },
|
||||||
|
{ 0, 0, 0, 0, chunk_from_chars(0x03, 0x02, 0x00, 0x04) }
|
||||||
|
};
|
||||||
|
|
||||||
|
START_TEST(test_asn1_parser_choice)
|
||||||
|
{
|
||||||
|
asn1_parser_t *parser;
|
||||||
|
chunk_t object;
|
||||||
|
int objectID, i1 = 0, i2 = 0, i3 = 0, i4 = 0;
|
||||||
|
bool success;
|
||||||
|
|
||||||
|
parser = asn1_parser_create(choiceObjects, choice_tests[_i].blob);
|
||||||
|
while (parser->iterate(parser, &objectID, &object))
|
||||||
|
{
|
||||||
|
switch (objectID)
|
||||||
|
{
|
||||||
|
case 2:
|
||||||
|
i1 += *object.ptr;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
i2 += *object.ptr;
|
||||||
|
break;
|
||||||
|
case 9:
|
||||||
|
i3 += *object.ptr;
|
||||||
|
break;
|
||||||
|
case 11:
|
||||||
|
i4 += *object.ptr;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
success = parser->success(parser);
|
||||||
|
parser->destroy(parser);
|
||||||
|
|
||||||
|
ck_assert(success == (choice_tests[_i].i1 ||
|
||||||
|
choice_tests[_i].i2 ||
|
||||||
|
choice_tests[_i].i3 ||
|
||||||
|
choice_tests[_i].i4 ));
|
||||||
|
|
||||||
|
ck_assert(i1 == choice_tests[_i].i1 &&
|
||||||
|
i2 == choice_tests[_i].i2 &&
|
||||||
|
i3 == choice_tests[_i].i3 &&
|
||||||
|
i4 == choice_tests[_i].i4 );
|
||||||
|
}
|
||||||
|
END_TEST
|
||||||
|
|
||||||
|
|
||||||
Suite *asn1_parser_suite_create()
|
Suite *asn1_parser_suite_create()
|
||||||
{
|
{
|
||||||
Suite *s;
|
Suite *s;
|
||||||
@@ -287,5 +387,9 @@ Suite *asn1_parser_suite_create()
|
|||||||
tcase_add_loop_test(tc, test_asn1_parser_option, 0, countof(option_tests));
|
tcase_add_loop_test(tc, test_asn1_parser_option, 0, countof(option_tests));
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
|
tc = tcase_create("choice");
|
||||||
|
tcase_add_loop_test(tc, test_asn1_parser_choice, 0, countof(choice_tests));
|
||||||
|
suite_add_tcase(s, tc);
|
||||||
|
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user