iPXE
datauri_test.c File Reference

Data URI tests. More...

#include <string.h>
#include <ipxe/uri.h>
#include <ipxe/datauri.h>
#include <ipxe/test.h>

Go to the source code of this file.

Macros

#define DATA(...)
 Define inline data.
#define datauri_ok(uristring, EXPECTED)
#define datauri_fail_ok(uristring)

Functions

 FILE_LICENCE (GPL2_OR_LATER_OR_UBDL)
static void datauri_okx (const char *uristring, const void *expected, size_t expected_len, const char *file, unsigned int line)
 Report result of data URI test.
static void datauri_fail_okx (const char *uristring, const char *file, unsigned int line)
 Report result of data URI failure test.
static void datauri_test_exec (void)
 Perform data URI self-test.

Variables

struct self_test datauri_test __self_test
 Data URI self-test.

Detailed Description

Data URI tests.

Definition in file datauri_test.c.

Macro Definition Documentation

◆ DATA

#define DATA ( ...)
Value:
{ __VA_ARGS__ }

Define inline data.

Definition at line 41 of file datauri_test.c.

Referenced by datauri_test_exec().

◆ datauri_ok

#define datauri_ok ( uristring,
EXPECTED )
Value:
do { \
static const uint8_t expected[] = EXPECTED; \
datauri_okx ( uristring, expected, sizeof ( expected ), \
__FILE__, __LINE__ ); \
} while ( 0 )
unsigned char uint8_t
Definition stdint.h:10
#define EXPECTED(...)
Define inline expected result point.

Definition at line 79 of file datauri_test.c.

79#define datauri_ok( uristring, EXPECTED ) do { \
80 static const uint8_t expected[] = EXPECTED; \
81 datauri_okx ( uristring, expected, sizeof ( expected ), \
82 __FILE__, __LINE__ ); \
83 } while ( 0 )

Referenced by datauri_test_exec().

◆ datauri_fail_ok

#define datauri_fail_ok ( uristring)
Value:
datauri_fail_okx ( uristring, __FILE__, __LINE__ )
static void datauri_fail_okx(const char *uristring, const char *file, unsigned int line)
Report result of data URI failure test.

Definition at line 115 of file datauri_test.c.

115#define datauri_fail_ok( uristring ) \
116 datauri_fail_okx ( uristring, __FILE__, __LINE__ )

Referenced by datauri_test_exec().

Function Documentation

◆ FILE_LICENCE()

FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL )

◆ datauri_okx()

void datauri_okx ( const char * uristring,
const void * expected,
size_t expected_len,
const char * file,
unsigned int line )
static

Report result of data URI test.

Parameters
uristringURI string
expectedExpected parsed data
expected_lenLength of expected parsed data
fileTest code file
lineTest code line

Definition at line 52 of file datauri_test.c.

54 {
55 uint8_t actual[ strlen ( uristring ) /* more than enough */ ];
56 struct uri *uri;
57 int len;
58
59 /* Parse URI */
60 uri = parse_uri ( uristring );
61 okx ( uri != NULL, file, line );
62 okx ( uri->scheme != NULL, file, line );
63 okx ( uri->opaque != NULL, file, line );
64 okx ( strcmp ( uri->scheme, "data" ) == 0, file, line );
65
66 /* Sanity check */
67 okx ( datauri_max_len ( uri ) <= sizeof ( actual ), file, line );
68 okx ( datauri_max_len ( uri ) >= expected_len, file, line );
69
70 /* Parse data URI */
71 len = datauri_parse ( uri, actual );
72 okx ( len >= 0, file, line );
73 okx ( ( ( size_t ) len ) == expected_len, file, line );
74 okx ( memcmp ( actual, expected, expected_len ) == 0, file, line );
75
76 /* Drop reference */
77 uri_put ( uri );
78}
#define NULL
NULL pointer (VOID *).
Definition Base.h:321
int datauri_parse(struct uri *uri, void *buf)
Parse data URI.
Definition datauri.c:62
static size_t datauri_max_len(struct uri *uri)
Get maximum length of parsed data URI.
Definition datauri.h:23
ring len
Length.
Definition dwmac.h:226
int strcmp(const char *first, const char *second)
Compare strings.
Definition string.c:174
int memcmp(const void *first, const void *second, size_t len)
Compare memory regions.
Definition string.c:115
size_t strlen(const char *src)
Get length of string.
Definition string.c:244
A Uniform Resource Identifier.
Definition uri.h:65
const char * scheme
Scheme.
Definition uri.h:69
const char * opaque
Opaque part.
Definition uri.h:71
#define okx(success, file, line)
Report test result.
Definition test.h:44
struct uri * parse_uri(const char *uri_string)
Parse URI.
Definition uri.c:297
static void uri_put(struct uri *uri)
Decrement URI reference count.
Definition uri.h:206

References datauri_max_len(), datauri_parse(), len, memcmp(), NULL, okx, uri::opaque, parse_uri(), uri::scheme, strcmp(), strlen(), and uri_put().

◆ datauri_fail_okx()

void datauri_fail_okx ( const char * uristring,
const char * file,
unsigned int line )
static

Report result of data URI failure test.

Parameters
uristringURI string
fileTest code file
lineTest code line

Definition at line 92 of file datauri_test.c.

93 {
94 uint8_t actual[ strlen ( uristring ) /* more than enough */ ];
95 struct uri *uri;
96 int len;
97
98 /* Parse URI */
99 uri = parse_uri ( uristring );
100 okx ( uri != NULL, file, line );
101 okx ( uri->scheme != NULL, file, line );
102 okx ( uri->opaque != NULL, file, line );
103 okx ( strcmp ( uri->scheme, "data" ) == 0, file, line );
104
105 /* Sanity check */
106 okx ( datauri_max_len ( uri ) <= sizeof ( actual ), file, line );
107
108 /* Parse data URI */
109 len = datauri_parse ( uri, actual );
110 okx ( len < 0, file, line );
111
112 /* Drop reference */
113 uri_put ( uri );
114}

References datauri_max_len(), datauri_parse(), len, NULL, okx, uri::opaque, parse_uri(), uri::scheme, strcmp(), strlen(), and uri_put().

◆ datauri_test_exec()

void datauri_test_exec ( void )
static

Perform data URI self-test.

Definition at line 122 of file datauri_test.c.

122 {
123
124 /* Empty data */
125 datauri_ok ( "data:,", DATA() );
126 datauri_ok ( "data:;base64,", DATA() );
127 datauri_ok ( "data:text/plain,", DATA() );
128
129 /* Simple values */
130 datauri_ok ( "data:,hello%20world%21",
131 DATA ( 'h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l',
132 'd', '!' ) );
133 datauri_ok ( "data:text/plain,simple",
134 DATA ( 's', 'i', 'm', 'p', 'l', 'e' ) );
135 datauri_ok ( "data:text/plain;charset=US-ASCII;base64,ZW5jb2RlZA==",
136 DATA ( 'e', 'n', 'c', 'o', 'd', 'e', 'd' ) );
137 datauri_ok ( "data:application/octet-string;base64,d2l0aABudWw=",
138 DATA ( 'w', 'i', 't', 'h', 0x00, 'n', 'u', 'l' ) );
139
140 /* Invalid values */
141 datauri_fail_ok ( "data:" );
142 datauri_fail_ok ( "data:;base64,INVALID===" );
143}
#define DATA(...)
Define inline data.
Definition acpi_test.c:74
#define DATA(...)
Define inline data.
#define datauri_ok(uristring, EXPECTED)
#define datauri_fail_ok(uristring)

References DATA, datauri_fail_ok, and datauri_ok.

Variable Documentation

◆ __self_test

struct self_test datauri_test __self_test
Initial value:
= {
.name = "datauri",
}
static void datauri_test_exec(void)
Perform data URI self-test.

Data URI self-test.

Definition at line 146 of file datauri_test.c.

146 {
147 .name = "datauri",
148 .exec = datauri_test_exec,
149};