Blame view

test/print_ut.c 4.14 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  // SPDX-License-Identifier: GPL-2.0+
e5a9d27fd   Simon Glass   test: Add a test ...
2
3
  /*
   * Copyright (c) 2012, The Chromium Authors
e5a9d27fd   Simon Glass   test: Add a test ...
4
5
6
7
8
   */
  
  #define DEBUG
  
  #include <common.h>
7a9e6ee6e   Heinrich Schuchardt   test: print_ut.c ...
9
  #if CONFIG_IS_ENABLED(EFI_LOADER) && !defined(API_BUILD)
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
10
11
  #include <efi_api.h>
  #endif
e5a9d27fd   Simon Glass   test: Add a test ...
12
13
14
15
16
  #include <display_options.h>
  #include <version.h>
  
  #define FAKE_BUILD_TAG	"jenkins-u-boot-denx_uboot_dm-master-build-aarch64" \
  			"and a lot more text to come"
3bad256f5   Heinrich Schuchardt   lib/vsprintf: all...
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
  /* Test printing GUIDs */
  static void guid_ut_print(void)
  {
  #if CONFIG_IS_ENABLED(LIB_UUID)
  	unsigned char guid[16] = {
  		1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16
  	};
  	char str[40];
  
  	sprintf(str, "%pUb", guid);
  	assert(!strcmp("01020304-0506-0708-090a-0b0c0d0e0f10", str));
  	sprintf(str, "%pUB", guid);
  	assert(!strcmp("01020304-0506-0708-090A-0B0C0D0E0F10", str));
  	sprintf(str, "%pUl", guid);
  	assert(!strcmp("04030201-0605-0807-090a-0b0c0d0e0f10", str));
  	sprintf(str, "%pUL", guid);
  	assert(!strcmp("04030201-0605-0807-090A-0B0C0D0E0F10", str));
  #endif
  }
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
36
37
38
  /* Test efi_loader specific printing */
  static void efi_ut_print(void)
  {
7a9e6ee6e   Heinrich Schuchardt   test: print_ut.c ...
39
  #if CONFIG_IS_ENABLED(EFI_LOADER) && !defined(API_BUILD)
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
  	char str[10];
  	u8 buf[sizeof(struct efi_device_path_sd_mmc_path) +
  	       sizeof(struct efi_device_path)];
  	u8 *pos = buf;
  	struct efi_device_path *dp_end;
  	struct efi_device_path_sd_mmc_path *dp_sd =
  			(struct efi_device_path_sd_mmc_path *)pos;
  
  	/* Create a device path for an SD card */
  	dp_sd->dp.type = DEVICE_PATH_TYPE_MESSAGING_DEVICE;
  	dp_sd->dp.sub_type = DEVICE_PATH_SUB_TYPE_MSG_SD;
  	dp_sd->dp.length = sizeof(struct efi_device_path_sd_mmc_path);
  	dp_sd->slot_number = 3;
  	pos += sizeof(struct efi_device_path_sd_mmc_path);
  	/* Append end node */
  	dp_end = (struct efi_device_path *)pos;
  	dp_end->type = DEVICE_PATH_TYPE_END;
  	dp_end->sub_type = DEVICE_PATH_SUB_TYPE_END;
  	dp_end->length = sizeof(struct efi_device_path);
  
  	snprintf(str, sizeof(str), "_%pD_", buf);
  	assert(!strcmp("_/SD(3)_", str));
5f1ce1d4c   Heinrich Schuchardt   vsprintf.c: corre...
62
63
64
65
  
  	/* NULL device path */
  	snprintf(str, sizeof(str), "_%pD_", NULL);
  	assert(!strcmp("_<NULL>_", str));
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
66
67
  #endif
  }
e5a9d27fd   Simon Glass   test: Add a test ...
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  static int do_ut_print(cmd_tbl_t *cmdtp, int flag, int argc,
  		       char *const argv[])
  {
  	char big_str[400];
  	int big_str_len;
  	char str[10], *s;
  	int len;
  
  	printf("%s: Testing print
  ", __func__);
  
  	snprintf(str, sizeof(str), "testing");
  	assert(!strcmp("testing", str));
  
  	snprintf(str, sizeof(str), "testing but too long");
  	assert(!strcmp("testing b", str));
  
  	snprintf(str, 1, "testing none");
  	assert(!strcmp("", str));
  
  	*str = 'x';
  	snprintf(str, 0, "testing none");
  	assert(*str == 'x');
085391b22   Rob Clark   test: print_ut: A...
91
92
  	sprintf(big_str, "_%ls_", L"foo");
  	assert(!strcmp("_foo_", big_str));
e5a9d27fd   Simon Glass   test: Add a test ...
93
94
95
96
97
98
99
100
  	/* Test the banner function */
  	s = display_options_get_banner(true, str, sizeof(str));
  	assert(s == str);
  	assert(!strcmp("
  
  U-Boo
  
  ", s));
6c74e94a6   Heinrich Schuchardt   lib/display_optio...
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  	/* Assert that we do not overwrite memory before the buffer */
  	str[0] = '`';
  	s = display_options_get_banner(true, str + 1, 1);
  	assert(s == str + 1);
  	assert(!strcmp("`", str));
  
  	str[0] = '~';
  	s = display_options_get_banner(true, str + 1, 2);
  	assert(s == str + 1);
  	assert(!strcmp("~
  ", str));
  
  	/* The last two characters are set to 
  
   for all buffer sizes > 2 */
e5a9d27fd   Simon Glass   test: Add a test ...
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
  	s = display_options_get_banner(false, str, sizeof(str));
  	assert(s == str);
  	assert(!strcmp("U-Boot 
  
  ", s));
  
  	/* Give it enough space for some of the version */
  	big_str_len = strlen(version_string) - 5;
  	s = display_options_get_banner_priv(false, FAKE_BUILD_TAG, big_str,
  					    big_str_len);
  	assert(s == big_str);
  	assert(!strncmp(version_string, s, big_str_len - 3));
  	assert(!strcmp("
  
  ", s + big_str_len - 3));
  
  	/* Give it enough space for the version and some of the build tag */
  	big_str_len = strlen(version_string) + 9 + 20;
  	s = display_options_get_banner_priv(false, FAKE_BUILD_TAG, big_str,
  					    big_str_len);
  	assert(s == big_str);
  	len = strlen(version_string);
  	assert(!strncmp(version_string, s, len));
  	assert(!strncmp(", Build: ", s + len, 9));
  	assert(!strncmp(FAKE_BUILD_TAG, s + 9 + len, 12));
  	assert(!strcmp("
  
  ", s + big_str_len - 3));
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
144
145
  	/* Test efi_loader specific printing */
  	efi_ut_print();
3bad256f5   Heinrich Schuchardt   lib/vsprintf: all...
146
147
  	/* Test printing GUIDs */
  	guid_ut_print();
e5a9d27fd   Simon Glass   test: Add a test ...
148
149
150
151
152
153
154
155
156
157
  	printf("%s: Everything went swimmingly
  ", __func__);
  	return 0;
  }
  
  U_BOOT_CMD(
  	ut_print,	1,	1,	do_ut_print,
  	"Very basic test of printf(), etc.",
  	""
  );