OpenVPN 3 Core Library
Loading...
Searching...
No Matches
test_optional_ref.cpp
Go to the documentation of this file.
1
2
// OpenVPN -- An application to securely tunnel IP networks
3
// over a single port, with support for SSL/TLS-based
4
// session authentication and key exchange,
5
// packet encryption, packet authentication, and
6
// packet compression.
7
//
8
// Copyright (C) 2024- OpenVPN Inc.
9
//
10
// This program is free software: you can redistribute it and/or modify
11
// it under the terms of the GNU Affero General Public License Version 3
12
// as published by the Free Software Foundation.
13
//
14
// This program is distributed in the hope that it will be useful,
15
// but WITHOUT ANY WARRANTY; without even the implied warranty of
16
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
// GNU Affero General Public License for more details.
18
//
19
// You should have received a copy of the GNU Affero General Public License
20
// along with this program in the COPYING file.
21
// If not, see <http://www.gnu.org/licenses/>.
22
//
23
//
24
// Basic unit test for the openvpn/openssl/pki/x509certinfo.hpp functions
25
//
26
27
#include "
test_common.hpp
"
28
29
#include <
openvpn/common/optional_ref.hpp
>
30
31
32
struct
test_optional
33
{
34
int
i
= 0;
35
};
36
37
TEST
(OptionalRefSuite, Simple)
38
{
39
int
i = 42;
40
auto
o =
openvpn::optional<int &>
(i);
41
EXPECT_TRUE(o);
42
EXPECT_EQ(o.value(), i);
43
EXPECT_EQ(*o, i);
44
}
45
46
TEST
(OptionalRefSuite, SimpleConst)
47
{
48
const
int
i = 42;
49
auto
o =
openvpn::optional<const int &>
(i);
50
EXPECT_TRUE(o);
51
EXPECT_EQ(o.value(), i);
52
EXPECT_EQ(*o, i);
53
}
54
55
TEST
(OptionalRefSuite, AssignTo)
56
{
57
int
i = 42;
58
auto
o =
openvpn::optional<int &>
(i);
59
int
j = 0;
60
o =
openvpn::optional<int &>
(j);
61
j = 96;
62
EXPECT_TRUE(o);
63
EXPECT_EQ(o.value(), j);
64
EXPECT_EQ(*o, j);
65
}
66
67
TEST
(OptionalRefSuite, AssignThru)
68
{
69
int
i = 42;
70
auto
o =
openvpn::optional<int &>
(i);
71
EXPECT_TRUE(o);
72
EXPECT_EQ(42, *o);
73
*o = 96;
74
EXPECT_EQ(i, 96);
75
}
76
77
TEST
(OptionalRefSuite, AssignPtrThru)
78
{
79
int
i = 42;
80
auto
o =
openvpn::optional<int &>
(&i);
81
EXPECT_TRUE(o);
82
EXPECT_EQ(42, *o);
83
*o = 96;
84
EXPECT_EQ(i, 96);
85
}
86
87
TEST
(OptionalRefSuite, Invalid)
88
{
89
auto
o =
openvpn::optional<int &>
();
90
EXPECT_THROW(o.value(), std::runtime_error);
91
EXPECT_THROW(*o, std::runtime_error);
92
}
93
94
TEST
(OptionalRefSuite, InvalidNullopt)
95
{
96
auto
o =
openvpn::optional<int &>
(std::nullopt);
97
EXPECT_THROW(o.value(), std::runtime_error);
98
EXPECT_THROW(*o, std::runtime_error);
99
}
100
101
TEST
(OptionalRefSuite, AssignNullopt)
102
{
103
int
i = 42;
104
auto
o =
openvpn::optional<int &>
(i);
105
EXPECT_TRUE(o);
106
EXPECT_EQ(o.value(), i);
107
EXPECT_EQ(*o, i);
108
o = std::nullopt;
109
EXPECT_THROW(o.value(), std::runtime_error);
110
EXPECT_THROW(*o, std::runtime_error);
111
}
112
113
114
TEST
(OptionalRefSuite, ValueOr)
115
{
116
int
i = 42;
117
auto
o =
openvpn::optional<int &>
(i);
118
EXPECT_TRUE(o);
119
EXPECT_EQ(o.value_or(96), 42);
120
}
121
122
TEST
(OptionalRefSuite, ValueOrDefault)
123
{
124
auto
o =
openvpn::optional<int &>
(std::nullopt);
125
EXPECT_FALSE(o);
126
EXPECT_EQ(o.value_or(42), 42);
127
}
128
129
TEST
(OptionalRefSuite, ValueOrDefaultLvalue)
130
{
131
auto
o =
openvpn::optional<int &>
(std::nullopt);
132
EXPECT_FALSE(o);
133
const
int
i = 42;
134
EXPECT_EQ(o.value_or(i), i);
135
}
136
137
TEST
(OptionalRefSuite, Deref)
138
{
139
auto
t =
test_optional
();
140
auto
o =
openvpn::optional<test_optional &>
(t);
141
EXPECT_EQ(o->i, 0);
142
o->i = 42;
143
EXPECT_EQ(o->i, 42);
144
}
145
146
TEST
(OptionalRefSuite, DerefInvalid)
147
{
148
auto
o =
openvpn::optional<test_optional &>
();
149
EXPECT_FALSE(o);
150
EXPECT_ANY_THROW([[maybe_unused]]
auto
t = o->i);
151
}
openvpn::optional
designed to represent an optional reference to an object of type T
Definition
optional_ref.hpp:81
optional_ref.hpp
test_optional
Definition
test_optional_ref.cpp:33
test_optional::i
int i
Definition
test_optional_ref.cpp:34
test_common.hpp
TEST
TEST(OptionalRefSuite, Simple)
Definition
test_optional_ref.cpp:37
test
unittests
test_optional_ref.cpp
Generated by
1.9.8