40 #define RAW(...) { __VA_ARGS__ } 50 #define storef_ok( _settings, _setting, _formatted, _raw_array ) do { \ 51 const uint8_t expected[] = _raw_array; \ 52 uint8_t actual[ sizeof ( expected ) ]; \ 55 ok ( storef_setting ( _settings, _setting, _formatted ) == 0 ); \ 56 len = fetch_setting ( _settings, _setting, NULL, NULL, actual, \ 57 sizeof ( actual ) ); \ 59 DBGC ( _settings, "Stored %s \"%s\", got:\n", \ 60 (_setting)->type->name, _formatted ); \ 61 DBGC_HDA ( _settings, 0, actual, len ); \ 63 DBGC ( _settings, "Stored %s \"%s\", got error %s\n", \ 64 (_setting)->type->name, _formatted, \ 67 ok ( len == ( int ) sizeof ( actual ) ); \ 68 ok ( memcmp ( actual, expected, sizeof ( actual ) ) == 0 ); \ 79 #define fetchf_ok( _settings, _setting, _raw_array, _formatted ) do { \ 80 const uint8_t raw[] = _raw_array; \ 81 char actual[ strlen ( _formatted ) + 1 ]; \ 84 ok ( store_setting ( _settings, _setting, raw, \ 85 sizeof ( raw ) ) == 0 ); \ 86 len = fetchf_setting ( _settings, _setting, NULL, NULL, actual, \ 87 sizeof ( actual ) ); \ 88 DBGC ( _settings, "Fetched %s \"%s\" from:\n", \ 89 (_setting)->type->name, actual ); \ 90 DBGC_HDA ( _settings, 0, raw, sizeof ( raw ) ); \ 91 ok ( len == ( int ) ( sizeof ( actual ) - 1 ) ); \ 92 ok ( strcmp ( actual, _formatted ) == 0 ); \ 103 #define storen_ok( _settings, _setting, _numeric, _raw_array ) do { \ 104 const uint8_t expected[] = _raw_array; \ 105 uint8_t actual[ sizeof ( expected ) ]; \ 108 ok ( storen_setting ( _settings, _setting, _numeric ) == 0 ); \ 109 len = fetch_setting ( _settings, _setting, NULL, NULL, actual, \ 110 sizeof ( actual ) ); \ 112 DBGC ( _settings, "Stored %s %#lx, got:\n", \ 113 (_setting)->type->name, \ 114 ( unsigned long ) _numeric ); \ 115 DBGC_HDA ( _settings, 0, actual, len ); \ 117 DBGC ( _settings, "Stored %s %#lx, got error %s\n", \ 118 (_setting)->type->name, \ 119 ( unsigned long ) _numeric, strerror ( len ) ); \ 121 ok ( len == ( int ) sizeof ( actual ) ); \ 122 ok ( memcmp ( actual, expected, sizeof ( actual ) ) == 0 ); \ 133 #define fetchn_ok( _settings, _setting, _raw_array, _numeric ) do { \ 134 const uint8_t raw[] = _raw_array; \ 135 unsigned long actual; \ 137 ok ( store_setting ( _settings, _setting, raw, \ 138 sizeof ( raw ) ) == 0 ); \ 139 ok ( fetchn_setting ( _settings, _setting, NULL, NULL, \ 141 DBGC ( _settings, "Fetched %s %#lx from:\n", \ 142 (_setting)->type->name, actual ); \ 143 DBGC_HDA ( _settings, 0, raw, sizeof ( raw ) ); \ 144 ok ( actual == ( unsigned long ) _numeric ); \ 161 #define test_settings test_generic_settings.settings 165 .
name =
"test_string",
166 .type = &setting_type_string,
171 .
name =
"test_uristring",
172 .type = &setting_type_uristring,
178 .type = &setting_type_ipv4,
184 .type = &setting_type_ipv6,
190 .type = &setting_type_int8,
195 .
name =
"test_int16",
196 .type = &setting_type_int16,
201 .
name =
"test_int32",
202 .type = &setting_type_int32,
207 .
name =
"test_uint8",
208 .type = &setting_type_uint8,
213 .
name =
"test_uint16",
214 .type = &setting_type_uint16,
219 .
name =
"test_uint32",
220 .type = &setting_type_uint32,
226 .type = &setting_type_hex,
231 .
name =
"test_hexhyp",
232 .type = &setting_type_hexhyp,
237 .
name =
"test_hexraw",
238 .type = &setting_type_hexraw,
243 .
name =
"test_base64",
244 .type = &setting_type_base64,
250 .type = &setting_type_uuid,
256 .type = &setting_type_guid,
261 .
name =
"test_busdevfn",
262 .type = &setting_type_busdevfn,
276 RAW (
'h',
'e',
'l',
'l',
'o' ) );
278 RAW (
'w',
'o',
'r',
'l',
'd' ),
"world" );
282 RAW (
'h',
'e',
'l',
'l',
'o',
' ',
'w',
'o',
'r',
'l',
285 RAW ( 1, 2, 3, 4, 5 ),
"%01%02%03%04%05" );
287 RAW ( 0,
' ',
'%',
'/',
'#',
':',
'@',
'?',
'=',
'&' ),
288 "%00%20%25%2F%23%3A%40%3F%3D%26" );
292 RAW ( 192, 168, 0, 1 ) );
294 RAW ( 212, 13, 204, 60 ),
"212.13.204.60" );
298 "2001:ba8:0:1d4::6950:5845",
299 RAW ( 0x20, 0x01, 0x0b, 0xa8, 0x00, 0x00, 0x01, 0xd4,
300 0x00, 0x00, 0x00, 0x00, 0x69, 0x50, 0x58, 0x45 ) );
302 RAW ( 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
303 0x02, 0x0c, 0x29, 0xff, 0xfe, 0xc5, 0x39, 0xa1 ),
304 "fe80::20c:29ff:fec5:39a1" );
310 "0x7f",
RAW ( 0x7f ) );
312 "0x1234",
RAW ( 0x34 ) );
314 "-32",
RAW ( -32 ) );
318 RAW ( 106 ),
"106" );
320 "129",
RAW ( 129 ) );
322 "0x3421",
RAW ( 0x21 ) );
324 RAW ( 0x54 ),
"0x54" );
326 "29483",
RAW ( 0x73, 0x2b ) );
328 RAW ( 0x82, 0x14 ),
"-32236" );
330 RAW ( 0x12, 0x78 ),
"4728" );
332 "48727",
RAW ( 0xbe, 0x57 ) );
334 RAW ( 0x9a, 0x24 ),
"0x9a24" );
336 "2901274",
RAW ( 0x00, 0x2c, 0x45, 0x1a ) );
338 RAW ( 0xff, 0x34, 0x2d, 0xaf ),
"-13357649" );
340 RAW ( 0x01, 0x00, 0x34, 0xab ),
"16790699" );
342 "0xb598d21",
RAW ( 0x0b, 0x59, 0x8d, 0x21 ) );
344 RAW ( 0xf2, 0x37, 0xb2, 0x18 ),
"0xf237b218" );
350 0xabcd,
RAW ( 0xcd ) );
356 RAW ( 0xfe ), 0xfe );
358 0x87bd,
RAW ( 0x87, 0xbd ) );
360 RAW ( 0x3d, 0x14 ), 0x3d14 );
362 RAW ( 0x80 ), -128 );
364 1,
RAW ( 0x00, 0x01 ) );
366 RAW ( 0xbd, 0x87 ), 0xbd87 );
368 RAW ( 0x80 ), 0x0080 );
370 0x0812bfd2,
RAW ( 0x08, 0x12, 0xbf, 0xd2 ) );
372 RAW ( 0x43, 0x87, 0x91, 0xb4 ), 0x438791b4 );
374 RAW ( 0xff, 0xff, 0xfe ), -2 );
376 0xb5927ab8,
RAW ( 0xb5, 0x92, 0x7a, 0xb8 ) );
378 RAW ( 0x98, 0xab, 0x41, 0x81 ), 0x98ab4181 );
380 RAW ( 0xff, 0xff, 0xfe ), 0x00fffffe );
382 RAW ( 0, 0, 0, 0x12, 0x34, 0x56, 0x78 ), 0x12345678 );
384 RAW ( 0, 0, 0, 0x12, 0x34, 0x56, 0x78 ), 0x12345678 );
386 RAW ( 0xff, 0xff, 0x87, 0x65, 0x43, 0x21 ), -0x789abcdf );
390 "08:12:f5:22:90:1b:4b:47:a8:30:cb:4d:67:4c:d6:76",
391 RAW ( 0x08, 0x12, 0xf5, 0x22, 0x90, 0x1b, 0x4b, 0x47, 0xa8,
392 0x30, 0xcb, 0x4d, 0x67, 0x4c, 0xd6, 0x76 ) );
394 RAW ( 0x62, 0xd9, 0xd4, 0xc4, 0x7e, 0x3b, 0x41, 0x46, 0x91,
395 0xc6, 0xfd, 0x0c, 0xbf ),
396 "62:d9:d4:c4:7e:3b:41:46:91:c6:fd:0c:bf" );
400 "11-33-22",
RAW ( 0x11, 0x33, 0x22 ) );
402 RAW ( 0x9f, 0xe5, 0x6d, 0xfb, 0x24, 0x3a, 0x4c, 0xbb, 0xa9,
403 0x09, 0x6c, 0x66, 0x13, 0xc1, 0xa8, 0xec, 0x27 ),
404 "9f-e5-6d-fb-24-3a-4c-bb-a9-09-6c-66-13-c1-a8-ec-27" );
408 "012345abcdef",
RAW ( 0x01, 0x23, 0x45, 0xab, 0xcd, 0xef ));
410 RAW ( 0x9e, 0x4b, 0x6e, 0xef, 0x36, 0xb6, 0x46, 0xfe, 0x8f,
411 0x17, 0x06, 0x39, 0x6b, 0xf4, 0x48, 0x4e ),
412 "9e4b6eef36b646fe8f1706396bf4484e" );
416 "cGFzc6\nNwaHJhc2U= ",
417 RAW ( 0x70, 0x61, 0x73, 0x73, 0xa3, 0x70, 0x68, 0x72, 0x61,
420 RAW ( 0x80, 0x81, 0x82, 0x83, 0x84, 0x00, 0xff ),
425 "36d22ed9-b64f-4fdb-941b-a54a0854f991",
426 RAW ( 0x36, 0xd2, 0x2e, 0xd9, 0xb6, 0x4f, 0x4f, 0xdb, 0x94,
427 0x1b, 0xa5, 0x4a, 0x08, 0x54, 0xf9, 0x91 ) );
429 "7ad4478f-c270-4601-a245-78598f25a984",
430 RAW ( 0x8f, 0x47, 0xd4, 0x7a, 0x70, 0xc2, 0x01, 0x46, 0xa2,
431 0x45, 0x78, 0x59, 0x8f, 0x25, 0xa9, 0x84 ) );
433 RAW ( 0x1a, 0x6a, 0x74, 0x9d, 0x0e, 0xda, 0x46, 0x1a, 0xa8,
434 0x7a, 0x7c, 0xfe, 0x4f, 0xca, 0x4a, 0x57 ),
435 "1a6a749d-0eda-461a-a87a-7cfe4fca4a57" );
437 RAW ( 0x1a, 0x6a, 0x74, 0x9d, 0x0e, 0xda, 0x46, 0x1a, 0xa8,
438 0x7a, 0x7c, 0xfe, 0x4f, 0xca, 0x4a, 0x57 ),
439 "9d746a1a-da0e-1a46-a87a-7cfe4fca4a57" );
443 RAW ( 0x03, 0x45 ),
"0000:03:08.5" );
445 RAW ( 0x00, 0x02, 0x0a, 0x21 ),
"0002:0a:04.1" );
static struct setting test_ipv4_setting
Test IPv4 address setting type.
#define storef_ok(_settings, _setting, _formatted, _raw_array)
Report a formatted-store test result.
void unregister_settings(struct settings *settings)
Unregister settings block.
#define fetchf_ok(_settings, _setting, _raw_array, _formatted)
Report a formatted-fetch test result.
REQUIRING_SYMBOL(settings_test)
static struct setting test_busdevfn_setting
Test PCI bus:dev.fn setting type.
static struct setting test_string_setting
Test string setting.
Self-test infrastructure.
const char * name
Test set name.
struct settings_operations generic_settings_operations
Generic settings operations.
static struct setting test_int32_setting
Test signed 32-bit integer setting type.
static struct setting test_ipv6_setting
Test IPv6 address setting type.
static struct setting test_guid_setting
Test GUID setting type.
#define fetchn_ok(_settings, _setting, _raw_array, _numeric)
Report a numeric-fetch test result.
static struct setting test_base64_setting
Test Base64 setting type.
static struct setting test_int8_setting
Test signed 8-bit integer setting type.
struct list_head list
List of generic settings.
struct self_test settings_test __self_test
Settings self-test.
static struct setting test_int16_setting
Test signed 16-bit integer setting type.
#define RAW(...)
Define inline raw data.
static struct setting test_uint8_setting
Test unsigned 8-bit integer setting type.
struct list_head siblings
Sibling settings blocks.
static struct setting test_uint32_setting
Test unsigned 32-bit integer setting type.
static struct setting test_uint16_setting
Test unsigned 16-bit integer setting type.
static void settings_test_exec(void)
Perform settings self-tests.
A generic settings block.
struct settings settings
Settings block.
#define storen_ok(_settings, _setting, _numeric, _raw_array)
Report a numeric-store test result.
static struct setting test_hex_setting
Test colon-separated hex string setting type.
struct generic_settings test_generic_settings
Test generic settings block.
struct list_head children
Child settings blocks.
int register_settings(struct settings *settings, struct settings *parent, const char *name)
Register settings block.
void clear_settings(struct settings *settings)
Clear settings block.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
#define test_settings
Test settings block.
static struct setting test_hexraw_setting
Test raw hex string setting type.
#define LIST_HEAD_INIT(list)
Initialise a static list head.
static struct setting test_uuid_setting
Test UUID setting type.
#define NULL
NULL pointer (VOID *)
static struct setting test_uristring_setting
Test URI-encoded string setting.
static struct setting test_hexhyp_setting
Test hyphen-separated hex string setting type.
struct refcnt * refcnt
Reference counter.