Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
z
Enumerations
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
r
s
t
u
v
w
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
z
Classes
Class List
Class Hierarchy
Class Members
All
:
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
[
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
y
Enumerations
a
b
c
d
e
f
h
i
k
l
m
n
o
p
r
s
t
u
v
w
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
z
Properties
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
Related Functions
:
a
b
c
d
e
f
g
h
i
j
l
m
n
o
p
q
r
s
t
u
v
w
z
Files
File List
File Members
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
_
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
x
Enumerator
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
s
t
u
v
w
x
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
grpc
third_party
boringssl-with-bazel
src
crypto
buf
buf_test.cc
Go to the documentation of this file.
1
/* Copyright (c) 2017, Google Inc.
2
*
3
* Permission to use, copy, modify, and/or distribute this software for any
4
* purpose with or without fee is hereby granted, provided that the above
5
* copyright notice and this permission notice appear in all copies.
6
*
7
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
15
#include <
openssl/buf.h
>
16
17
#include <
string.h
>
18
19
#include <string>
20
21
#include <gtest/gtest.h>
22
23
24
TEST
(BufTest, Basic) {
25
bssl::UniquePtr<BUF_MEM>
buf
(
BUF_MEM_new
());
26
ASSERT_TRUE
(
buf
);
27
EXPECT_EQ
(0
u
,
buf
->length);
28
29
// Use BUF_MEM_reserve to increase buf->max.
30
ASSERT_TRUE
(
BUF_MEM_reserve
(
buf
.get(), 200));
31
EXPECT_GE
(
buf
->max, 200
u
);
32
EXPECT_EQ
(0
u
,
buf
->length);
33
34
// BUF_MEM_reserve with a smaller cap is a no-op.
35
size_t
old_max =
buf
->max;
36
ASSERT_TRUE
(
BUF_MEM_reserve
(
buf
.get(), 100));
37
EXPECT_EQ
(old_max,
buf
->max);
38
EXPECT_EQ
(0
u
,
buf
->length);
39
40
// BUF_MEM_grow can increase the length without reallocating.
41
ASSERT_EQ
(100
u
,
BUF_MEM_grow
(
buf
.get(), 100));
42
EXPECT_EQ
(100
u
,
buf
->length);
43
EXPECT_EQ
(old_max,
buf
->max);
44
memset
(
buf
->data,
'A'
,
buf
->length);
45
46
// If BUF_MEM_reserve reallocates, it preserves the contents.
47
ASSERT_TRUE
(
BUF_MEM_reserve
(
buf
.get(), old_max + 1));
48
ASSERT_GE
(
buf
->max, old_max + 1);
49
EXPECT_EQ
(100
u
,
buf
->length);
50
for
(
size_t
i
= 0;
i
< 100;
i
++) {
51
EXPECT_EQ
(
'A'
,
buf
->data[
i
]);
52
}
53
54
// BUF_MEM_grow should zero everything beyond buf->length.
55
memset
(
buf
->data,
'B'
,
buf
->max);
56
ASSERT_EQ
(150
u
,
BUF_MEM_grow
(
buf
.get(), 150));
57
EXPECT_EQ
(150
u
,
buf
->length);
58
for
(
size_t
i
= 0;
i
< 100;
i
++) {
59
EXPECT_EQ
(
'B'
,
buf
->data[
i
]);
60
}
61
for
(
size_t
i
= 100;
i
< 150;
i
++) {
62
EXPECT_EQ
(0,
buf
->data[
i
]);
63
}
64
65
// BUF_MEM_grow can rellocate if necessary.
66
size_t
new_len =
buf
->max + 1;
67
ASSERT_EQ
(new_len,
BUF_MEM_grow
(
buf
.get(), new_len));
68
EXPECT_GE
(
buf
->max, new_len);
69
EXPECT_EQ
(new_len,
buf
->length);
70
for
(
size_t
i
= 0;
i
< 100;
i
++) {
71
EXPECT_EQ
(
'B'
,
buf
->data[
i
]);
72
}
73
for
(
size_t
i
= 100;
i
< new_len;
i
++) {
74
EXPECT_EQ
(0,
buf
->data[
i
]);
75
}
76
77
// BUF_MEM_grow can shink.
78
ASSERT_EQ
(50
u
,
BUF_MEM_grow
(
buf
.get(), 50));
79
EXPECT_EQ
(50
u
,
buf
->length);
80
for
(
size_t
i
= 0;
i
< 50;
i
++) {
81
EXPECT_EQ
(
'B'
,
buf
->data[
i
]);
82
}
83
}
84
85
TEST
(BufTest,
Append
) {
86
bssl::UniquePtr<BUF_MEM>
buf
(
BUF_MEM_new
());
87
ASSERT_TRUE
(
buf
);
88
89
ASSERT_TRUE
(
BUF_MEM_append
(
buf
.get(),
nullptr
, 0));
90
ASSERT_TRUE
(
BUF_MEM_append
(
buf
.get(),
"hello "
, 6));
91
ASSERT_TRUE
(
BUF_MEM_append
(
buf
.get(),
nullptr
, 0));
92
ASSERT_TRUE
(
BUF_MEM_append
(
buf
.get(),
"world"
, 5));
93
std::string
str
(128,
'A'
);
94
ASSERT_TRUE
(
BUF_MEM_append
(
buf
.get(),
str
.data(),
str
.size()));
95
96
EXPECT_EQ
(
"hello world"
+
str
,
std::string
(
buf
->data,
buf
->length));
97
}
xds_interop_client.str
str
Definition:
xds_interop_client.py:487
memset
return memset(p, 0, total)
BUF_MEM_append
#define BUF_MEM_append
Definition:
boringssl_prefix_symbols.h:1007
string.h
buf
voidpf void * buf
Definition:
bloaty/third_party/zlib/contrib/minizip/ioapi.h:136
testing::internal::string
::std::string string
Definition:
bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
absl::debugging_internal::Append
static void Append(State *state, const char *const str, const int length)
Definition:
abseil-cpp/absl/debugging/internal/demangle.cc:359
ASSERT_GE
#define ASSERT_GE(val1, val2)
Definition:
bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2072
u
OPENSSL_EXPORT pem_password_cb void * u
Definition:
pem.h:351
EXPECT_EQ
#define EXPECT_EQ(a, b)
Definition:
iomgr/time_averaged_stats_test.cc:27
BUF_MEM_grow
#define BUF_MEM_grow
Definition:
boringssl_prefix_symbols.h:1009
BUF_MEM_reserve
#define BUF_MEM_reserve
Definition:
boringssl_prefix_symbols.h:1012
buf.h
TEST
TEST(BufTest, Basic)
Definition:
buf_test.cc:24
ASSERT_TRUE
#define ASSERT_TRUE(condition)
Definition:
bloaty/third_party/googletest/googletest/include/gtest/gtest.h:1973
EXPECT_GE
#define EXPECT_GE(val1, val2)
Definition:
bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2034
BUF_MEM_new
#define BUF_MEM_new
Definition:
boringssl_prefix_symbols.h:1011
i
uint64_t i
Definition:
abseil-cpp/absl/container/btree_benchmark.cc:230
ASSERT_EQ
#define ASSERT_EQ(val1, val2)
Definition:
bloaty/third_party/googletest/googletest/include/gtest/gtest.h:2056
grpc
Author(s):
autogenerated on Thu Mar 13 2025 02:58:41