Blame view

test/print_ut.c 3.35 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"
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
17
18
19
  /* Test efi_loader specific printing */
  static void efi_ut_print(void)
  {
7a9e6ee6e   Heinrich Schuchardt   test: print_ut.c ...
20
  #if CONFIG_IS_ENABLED(EFI_LOADER) && !defined(API_BUILD)
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
  	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...
43
44
45
46
  
  	/* NULL device path */
  	snprintf(str, sizeof(str), "_%pD_", NULL);
  	assert(!strcmp("_<NULL>_", str));
256060e42   Heinrich Schuchardt   vsprintf.c: add E...
47
48
  #endif
  }
e5a9d27fd   Simon Glass   test: Add a test ...
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  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...
72
73
  	sprintf(big_str, "_%ls_", L"foo");
  	assert(!strcmp("_foo_", big_str));
e5a9d27fd   Simon Glass   test: Add a test ...
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
  	/* Test the banner function */
  	s = display_options_get_banner(true, str, sizeof(str));
  	assert(s == str);
  	assert(!strcmp("
  
  U-Boo
  
  ", s));
  
  	s = display_options_get_banner(true, str, 1);
  	assert(s == str);
  	assert(!strcmp("", s));
  
  	s = display_options_get_banner(true, str, 2);
  	assert(s == str);
  	assert(!strcmp("
  ", s));
  
  	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...
120
121
  	/* Test efi_loader specific printing */
  	efi_ut_print();
e5a9d27fd   Simon Glass   test: Add a test ...
122
123
124
125
126
127
128
129
130
131
  	printf("%s: Everything went swimmingly
  ", __func__);
  	return 0;
  }
  
  U_BOOT_CMD(
  	ut_print,	1,	1,	do_ut_print,
  	"Very basic test of printf(), etc.",
  	""
  );