| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 | // SPDX-License-Identifier: GPL-2.0+
/*
 * (C) Copyright 2020, Heinrich Schuchardt <xypron.glpk@gmx.de>
 */
#include <common.h>
#include <efi_loader.h>
#include <test/lib.h>
#include <test/test.h>
#include <test/ut.h>
#define UT_REG_CAPACITY 6
static int lib_test_efi_image_region_add(struct unit_test_state *uts)
{
	struct efi_image_regions *regs;
	regs = calloc(sizeof(*regs) +
		      sizeof(struct image_region) * UT_REG_CAPACITY, 1);
	ut_assert(regs);
	regs->max = UT_REG_CAPACITY;
	ut_asserteq(0, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x4000,
					    (void *)0x3000, 1));
	ut_asserteq(0, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x3100,
					    (void *)0x4000, 1));
	ut_asserteq(1, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x2000,
					    (void *)0x3100, 1));
	ut_asserteq(2, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x1000,
					    (void *)0x1f00, 1));
	ut_asserteq(3, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x4000,
					    (void *)0x4e00, 1));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x1f00,
					    (void *)0x2001, 1));
	ut_asserteq(5, regs->num);
	ut_asserteq_ptr((void *)0x3100, regs->reg[0].data);
	ut_asserteq(0x0f00, regs->reg[0].size);
	ut_asserteq_ptr((void *)0x2000, regs->reg[1].data);
	ut_asserteq(0x1100, regs->reg[1].size);
	ut_asserteq_ptr((void *)0x1000, regs->reg[2].data);
	ut_asserteq(0x0f00, regs->reg[2].size);
	ut_asserteq_ptr((void *)0x4000, regs->reg[3].data);
	ut_asserteq(0x0e00, regs->reg[3].size);
	ut_asserteq_ptr((void *)0x1f00, regs->reg[4].data);
	ut_asserteq(0x0101, regs->reg[4].size);
	free(regs);
	return 0;
}
LIB_TEST(lib_test_efi_image_region_add, 0);
static int lib_test_efi_image_region_sort(struct unit_test_state *uts)
{
	struct efi_image_regions *regs;
	regs = calloc(sizeof(*regs) +
		      sizeof(struct image_region) * UT_REG_CAPACITY, 1);
	ut_assert(regs);
	regs->max = UT_REG_CAPACITY;
	ut_asserteq(0, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x4000,
					    (void *)0x3000, 0));
	ut_asserteq(0, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x3100,
					    (void *)0x4000, 0));
	ut_asserteq(1, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x2000,
					    (void *)0x3100, 0));
	ut_asserteq(2, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x1000,
					    (void *)0x1f00, 0));
	ut_asserteq(3, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x4000,
					    (void *)0x4e00, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x1f00,
					    (void *)0x2001, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x10ff,
					    (void *)0x11ff, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x0000,
					    (void *)0x6000, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x3100,
					    (void *)0x0e00, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x3200,
					    (void *)0x0e00, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_INVALID_PARAMETER,
		       efi_image_region_add(regs, (void *)0x3200,
					    (void *)0x0d00, 0));
	ut_asserteq(4, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x1f00,
					    (void *)0x2000, 0));
	ut_asserteq(5, regs->num);
	ut_asserteq_64(EFI_SUCCESS,
		       efi_image_region_add(regs, (void *)0x4000,
					    (void *)0x4000, 0));
	ut_asserteq(6, regs->num);
	ut_asserteq_64(EFI_OUT_OF_RESOURCES,
		       efi_image_region_add(regs, (void *)0x6000,
					    (void *)0x0100, 0));
	ut_asserteq(6, regs->num);
	ut_asserteq_ptr((void *)0x1000, regs->reg[0].data);
	ut_asserteq(0x0f00, regs->reg[0].size);
	ut_asserteq_ptr((void *)0x1f00, regs->reg[1].data);
	ut_asserteq(0x0100, regs->reg[1].size);
	ut_asserteq_ptr((void *)0x2000, regs->reg[2].data);
	ut_asserteq(0x1100, regs->reg[2].size);
	ut_asserteq_ptr((void *)0x3100, regs->reg[3].data);
	ut_asserteq(0x0f00, regs->reg[3].size);
	ut_asserteq_ptr((void *)0x4000, regs->reg[4].data);
	ut_asserteq(0x0000, regs->reg[4].size);
	ut_asserteq_ptr((void *)0x4000, regs->reg[5].data);
	ut_asserteq(0x0e00, regs->reg[5].size);
	free(regs);
	return 0;
}
LIB_TEST(lib_test_efi_image_region_sort, 0);
 |