Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
ff277dce
Commit
ff277dce
authored
Aug 22, 2019
by
Jakob Otto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refactor ipv6_endpoint tests
parent
558571e5
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
110 additions
and
108 deletions
+110
-108
libcaf_core/test/ipv4_endpoint.cpp
libcaf_core/test/ipv4_endpoint.cpp
+1
-1
libcaf_core/test/ipv6_endpoint.cpp
libcaf_core/test/ipv6_endpoint.cpp
+109
-107
No files found.
libcaf_core/test/ipv4_endpoint.cpp
View file @
ff277dce
...
...
@@ -64,7 +64,7 @@ struct fixture {
if
(
auto
err
=
sink
(
x
))
CAF_FAIL
(
"serialization failed: "
<<
sys
.
render
(
err
));
binary_deserializer
source
(
sys
,
make_span
(
buf
));
ipv4_endpoint
y
;
T
y
;
if
(
auto
err
=
source
(
y
))
CAF_FAIL
(
"deserialization failed: "
<<
sys
.
render
(
err
));
return
y
;
...
...
libcaf_core/test/ipv6_endpoint.cpp
View file @
ff277dce
...
...
@@ -22,6 +22,7 @@
#include "caf/test/unit_test.hpp"
#include <cassert>
#include <vector>
#include "caf/actor_system.hpp"
...
...
@@ -36,91 +37,90 @@ using namespace caf;
namespace
{
struct
test_data
{
using
comparison_testcase
=
std
::
pair
<
ipv6_endpoint
,
ipv6_endpoint
>
;
using
to_string_testcase
=
std
::
pair
<
ipv6_endpoint
,
std
::
string
>
;
using
addr_bytes
=
ipv6_address
::
array_type
;
test_data
()
{
// different ip but same port
add
(
make_ipv6_endpoint
({
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
},
8888
),
make_ipv6_endpoint
({
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
2
},
8888
));
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
8888
),
make_ipv6_endpoint
({
1
,
0
,
0
,
0
,
9
,
0
,
0
,
0
,
0
,
27
,
0
,
0
,
0
,
0
,
0
,
2
},
8888
));
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
255
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
17
},
8888
),
make_ipv6_endpoint
({
1
,
0
,
0
,
0
,
9
,
0
,
0
,
0
,
0
,
27
,
0
,
0
,
0
,
255
,
0
,
3
},
8888
));
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
8888
),
make_ipv6_endpoint
({
1
,
0
,
0
,
0
,
9
,
0
,
0
,
0
,
0
,
27
,
0
,
0
,
0
,
0
,
0
,
2
},
8888
));
// same ip but different port
add
(
make_ipv6_endpoint
({
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
},
1111
),
make_ipv6_endpoint
({
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
},
8888
));
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
1234
),
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
5678
));
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
255
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
17
},
5678
),
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
255
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
17
},
12345
));
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
8888
),
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
9999
));
// String test-data
add
(
make_ipv6_endpoint
({
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
1
},
1111
),
"[::1]:1111"
);
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
1234
),
"[4e::d00:0:ed00:0:1]:1234"
);
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
255
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
17
},
2345
),
"[4e:0:ff:d00:0:ed00:0:11]:2345"
);
add
(
make_ipv6_endpoint
({
0
,
78
,
0
,
0
,
0
,
0
,
13
,
0
,
0
,
0
,
237
,
0
,
0
,
0
,
0
,
1
},
1234
),
"[4e::d00:0:ed00:0:1]:1234"
);
ipv6_endpoint
operator
""
_ep
(
const
char
*
str
,
size_t
)
{
union
{
std
::
array
<
uint8_t
,
16
>
xs_bytes
;
std
::
array
<
uint16_t
,
8
>
xs
;
};
union
{
std
::
array
<
uint8_t
,
16
>
ys_bytes
;
std
::
array
<
uint16_t
,
8
>
ys
;
};
memset
(
xs_bytes
.
data
(),
0
,
xs_bytes
.
size
());
memset
(
ys_bytes
.
data
(),
0
,
xs_bytes
.
size
());
assert
(
*
str
==
'['
);
++
str
;
char
*
next
=
nullptr
;
auto
pull
=
[
&
]
{
auto
x
=
static_cast
<
uint16_t
>
(
strtol
(
str
,
&
next
,
16
));
return
detail
::
to_network_order
(
x
);
};
size_t
n
=
0
;
do
{
xs
[
n
++
]
=
pull
();
assert
(
next
!=
nullptr
);
str
=
next
+
1
;
}
while
(
*
str
!=
':'
&&
*
str
!=
']'
);
if
(
*
str
==
':'
)
{
++
str
;
do
{
ys
[
0
]
=
pull
();
std
::
rotate
(
ys
.
begin
(),
ys
.
begin
()
+
1
,
ys
.
end
());
assert
(
next
!=
nullptr
);
str
=
next
+
1
;
}
while
(
*
next
!=
']'
);
}
assert
(
*
next
==
']'
);
assert
(
*
str
==
':'
);
++
str
;
auto
port
=
static_cast
<
uint16_t
>
(
strtol
(
str
,
nullptr
,
10
));
std
::
array
<
uint8_t
,
16
>
bytes
;
for
(
size_t
i
=
0
;
i
<
16
;
++
i
)
bytes
[
i
]
=
xs_bytes
[
i
]
|
ys_bytes
[
i
];
return
ipv6_endpoint
{
ipv6_address
{
bytes
},
port
};
}
// First endpoint is always smaller than the second.
std
::
vector
<
comparison_testcase
>
comparison_testdata
;
std
::
vector
<
to_string_testcase
>
to_string_testdata
;
struct
fixture
{
actor_system_config
cfg
;
actor_system
sys
{
cfg
}
;
ipv6_endpoint
make_ipv6_endpoint
(
addr_bytes
bytes
,
uint16_t
port
)
{
return
ipv6_endpoint
{
ipv6_address
{
bytes
},
port
};
template
<
class
T
>
T
roundtrip
(
T
x
)
{
using
container_type
=
std
::
vector
<
byte
>
;
container_type
buf
;
serializer_impl
<
container_type
>
sink
(
sys
,
buf
);
if
(
auto
err
=
sink
(
x
))
CAF_FAIL
(
"serialization failed: "
<<
sys
.
render
(
err
));
binary_deserializer
source
(
sys
,
make_span
(
buf
));
T
y
;
if
(
auto
err
=
source
(
y
))
CAF_FAIL
(
"deserialization failed: "
<<
sys
.
render
(
err
));
return
y
;
}
};
private:
// Convenience functions for adding testcases.
void
add
(
ipv6_endpoint
ep1
,
ipv6_endpoint
ep2
)
{
comparison_testdata
.
emplace_back
(
comparison_testcase
{
ep1
,
ep2
});
}
#define CHECK_TO_STRING(addr) CAF_CHECK_EQUAL(addr, to_string(addr##_ep))
void
add
(
ipv6_endpoint
ep
,
const
std
::
string
&
str
)
{
to_string_testdata
.
emplace_back
(
to_string_testcase
{
ep
,
str
});
}
};
#define CHECK_COMPARISON(addr1, addr2) \
CAF_CHECK_GREATER(addr2##_ep, addr1##_ep); \
CAF_CHECK_GREATER_OR_EQUAL(addr2##_ep, addr1##_ep); \
CAF_CHECK_GREATER_OR_EQUAL(addr1##_ep, addr1##_ep); \
CAF_CHECK_GREATER_OR_EQUAL(addr2##_ep, addr2##_ep); \
CAF_CHECK_EQUAL(addr1##_ep, addr1##_ep); \
CAF_CHECK_EQUAL(addr2##_ep, addr2##_ep); \
CAF_CHECK_LESS_OR_EQUAL(addr1##_ep, addr2##_ep); \
CAF_CHECK_LESS_OR_EQUAL(addr1##_ep, addr1##_ep); \
CAF_CHECK_LESS_OR_EQUAL(addr2##_ep, addr2##_ep); \
CAF_CHECK_NOT_EQUAL(addr1##_ep, addr2##_ep); \
CAF_CHECK_NOT_EQUAL(addr2##_ep, addr1##_ep);
struct
test_fixture
:
public
test_data
{
actor_system_config
cfg
;
actor_system
sys
{
cfg
};
};
#define CHECK_SERIALIZATION(addr) \
CAF_CHECK_EQUAL(addr##_ep, roundtrip(addr##_ep))
}
// namespace
CAF_TEST_FIXTURE_SCOPE
(
comparison_scope
,
fixture
)
CAF_TEST
(
constructing
assigning
and
hash_code
)
{
const
uint16_t
port
=
8888
;
ipv6_address
::
array_type
bytes
{
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
...
...
@@ -138,45 +138,47 @@ CAF_TEST(constructing assigning and hash_code) {
CAF_CHECK_EQUAL
(
ep1
.
hash_code
(),
ep2
.
hash_code
());
}
CAF_TEST_FIXTURE_SCOPE
(
comparison_scope
,
test_fixture
)
CAF_TEST
(
to_string
)
{
for
(
auto
&
testcase
:
to_string_testdata
)
CAF_CHECK_EQUAL
(
to_string
(
testcase
.
first
),
testcase
.
second
);
CHECK_TO_STRING
(
"[::1]:8888"
);
CHECK_TO_STRING
(
"[4e::d00:0:ed00:0:1]:1234"
);
CHECK_TO_STRING
(
"[::1]:1111"
);
CHECK_TO_STRING
(
"[4432::33:1]:8732"
);
CHECK_TO_STRING
(
"[::2]:8888"
);
CHECK_TO_STRING
(
"[4f::d00:12:ed00:0:1]:1234"
);
CHECK_TO_STRING
(
"[4f::1]:2222"
);
CHECK_TO_STRING
(
"[4432:8d::33:1]:8732"
);
CHECK_TO_STRING
(
"[4e::d00:0:ed00:0:1]:5678"
);
CHECK_TO_STRING
(
"[::1]:2221"
);
CHECK_TO_STRING
(
"[::1]:2222"
);
CHECK_TO_STRING
(
"[4432::33:1]:872"
);
CHECK_TO_STRING
(
"[4432::33:1]:999"
);
}
CAF_TEST
(
comparison
)
{
for
(
auto
testcase
:
comparison_testdata
)
{
// First member of this pair is always smaller than the second one.
auto
ep1
=
testcase
.
first
;
auto
ep2
=
testcase
.
second
;
CAF_CHECK_GREATER
(
ep2
,
ep1
);
CAF_CHECK_GREATER_OR_EQUAL
(
ep2
,
ep1
);
CAF_CHECK_GREATER_OR_EQUAL
(
ep1
,
ep1
);
CAF_CHECK_GREATER_OR_EQUAL
(
ep2
,
ep2
);
CAF_CHECK_EQUAL
(
ep1
,
ep1
);
CAF_CHECK_EQUAL
(
ep2
,
ep2
);
CAF_CHECK_LESS_OR_EQUAL
(
ep1
,
ep2
);
CAF_CHECK_LESS_OR_EQUAL
(
ep1
,
ep1
);
CAF_CHECK_LESS_OR_EQUAL
(
ep2
,
ep2
);
CAF_CHECK_NOT_EQUAL
(
ep1
,
ep2
);
CAF_CHECK_NOT_EQUAL
(
ep2
,
ep1
);
}
CHECK_COMPARISON
(
"[::1]:8888"
,
"[::2]:8888"
);
CHECK_COMPARISON
(
"[4e::d00:0:ed00:0:1]:1234"
,
"[4f::d00:12:ed00:0:1]:1234"
);
CHECK_COMPARISON
(
"[::1]:1111"
,
"[4f::1]:2222"
);
CHECK_COMPARISON
(
"[4432::33:1]:8732"
,
"[4432:8d::33:1]:8732"
);
CHECK_COMPARISON
(
"[::1]:1111"
,
"[::1]:8888"
);
CHECK_COMPARISON
(
"[4e::d00:0:ed00:0:1]:1234"
,
"[4e::d00:0:ed00:0:1]:5678"
);
CHECK_COMPARISON
(
"[::1]:2221"
,
"[::1]:2222"
);
CHECK_COMPARISON
(
"[4432::33:1]:872"
,
"[4432::33:1]:999"
);
}
CAF_TEST
(
serialization
)
{
using
container_type
=
std
::
vector
<
byte
>
;
for
(
auto
&
testcase
:
comparison_testdata
)
{
container_type
buf
;
serializer_impl
<
container_type
>
sink
(
sys
,
buf
);
if
(
auto
err
=
sink
(
testcase
.
first
))
CAF_FAIL
(
"serialization failed: "
<<
sys
.
render
(
err
));
binary_deserializer
source
(
sys
,
make_span
(
buf
));
ipv6_endpoint
deserialized_data
;
if
(
auto
err
=
source
(
deserialized_data
))
CAF_FAIL
(
"deserialization failed: "
<<
sys
.
render
(
err
));
CAF_CHECK_EQUAL
(
testcase
.
first
,
deserialized_data
);
}
CHECK_SERIALIZATION
(
"[::1]:8888"
);
CHECK_SERIALIZATION
(
"[4e::d00:0:ed00:0:1]:1234"
);
CHECK_SERIALIZATION
(
"[::1]:1111"
);
CHECK_SERIALIZATION
(
"[4432::33:1]:8732"
);
CHECK_SERIALIZATION
(
"[::2]:8888"
);
CHECK_SERIALIZATION
(
"[4f::d00:12:ed00:0:1]:1234"
);
CHECK_SERIALIZATION
(
"[4f::1]:2222"
);
CHECK_SERIALIZATION
(
"[4432:8d::33:1]:8732"
);
CHECK_SERIALIZATION
(
"[4e::d00:0:ed00:0:1]:5678"
);
CHECK_SERIALIZATION
(
"[::1]:2221"
);
CHECK_SERIALIZATION
(
"[::1]:2222"
);
CHECK_SERIALIZATION
(
"[4432::33:1]:872"
);
CHECK_SERIALIZATION
(
"[4432::33:1]:999"
);
}
CAF_TEST_FIXTURE_SCOPE_END
()
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment