blob: c8167ed3605c43d3f76167dabdec3bae64029370 [file] [log] [blame]
#ifndef _ASN1_TEST_H
#define _ASN1_TEST_H
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h>
#include <ipxe/image.h>
#include <ipxe/sha1.h>
#include <ipxe/test.h>
/** Digest algorithm used for ASN.1 tests */
#define asn1_test_digest_algorithm sha1_algorithm
/** Digest size used for ASN.1 tests */
#define ASN1_TEST_DIGEST_SIZE SHA1_DIGEST_SIZE
/** An ASN.1 test digest */
struct asn1_test_digest {
/** Digest value */
uint8_t digest[ASN1_TEST_DIGEST_SIZE];
};
/** An ASN.1 test */
struct asn1_test {
/** Image type */
struct image_type *type;
/** Source image */
struct image *image;
/** Expected digests of ASN.1 objects */
struct asn1_test_digest *expected;
/** Number of ASN.1 objects */
unsigned int count;
};
/**
* Define an ASN.1 test
*
* @v _name Test name
* @v _type Test image file type
* @v _file Test image file data
* @v ... Expected ASN.1 object digests
* @ret test ASN.1 test
*/
#define ASN1( _name, _type, _file, ... ) \
static const char _name ## __file[] = _file; \
static struct image _name ## __image = { \
.refcnt = REF_INIT ( ref_no_free ), \
.name = #_name, \
.data = ( userptr_t ) ( _name ## __file ), \
.len = sizeof ( _name ## __file ), \
}; \
static struct asn1_test_digest _name ## _expected[] = { \
__VA_ARGS__ \
}; \
static struct asn1_test _name = { \
.type = _type, \
.image = & _name ## __image, \
.expected = _name ## _expected, \
.count = ( sizeof ( _name ## _expected ) / \
sizeof ( _name ## _expected[0] ) ), \
};
extern void asn1_okx ( struct asn1_test *test, const char *file,
unsigned int line );
/**
* Report ASN.1 test result
*
* @v test ASN.1 test
*/
#define asn1_ok( test ) asn1_okx ( test, __FILE__, __LINE__ )
#endif /* _ASN1_TEST_H */