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
|
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/vespalib/testkit/test_kit.h>
#include <vespa/vespalib/net/socket_spec.h>
using namespace vespalib;
void verify(const SocketSpec &spec, bool valid,
const vespalib::string &path, const vespalib::string &name,
const vespalib::string &host, int port)
{
EXPECT_EQUAL(spec.valid(), valid);
EXPECT_EQUAL(spec.path(), path);
EXPECT_EQUAL(spec.name(), name);
EXPECT_EQUAL(spec.host(), host);
EXPECT_EQUAL(spec.port(), port);
}
void verify_path(const SocketSpec &spec, const vespalib::string &path) {
TEST_DO(verify(spec, true, path, "", "", -1));
}
void verify_name(const SocketSpec &spec, const vespalib::string &name) {
TEST_DO(verify(spec, true, "", name, "", -1));
}
void verify_host_port(const SocketSpec &spec, const vespalib::string &host, int port) {
TEST_DO(verify(spec, true, "", "", host, port));
}
void verify_port(const SocketSpec &spec, int port) {
TEST_DO(verify(spec, true, "", "", "", port));
}
void verify_invalid(const SocketSpec &spec) {
TEST_DO(verify(spec, false, "", "", "", -1));
}
void verify_spec(const vespalib::string &str, const vespalib::string &expect) {
vespalib::string actual = SocketSpec(str).spec();
EXPECT_EQUAL(actual, expect);
}
void verify_spec(const vespalib::string &str) {
TEST_DO(verify_spec(str, str));
}
//-----------------------------------------------------------------------------
TEST("require that socket spec can be created directly from path") {
TEST_DO(verify_path(SocketSpec::from_path("my_path"), "my_path"));
}
TEST("require that socket spec can be created directly from name") {
TEST_DO(verify_name(SocketSpec::from_name("my_name"), "my_name"));
}
TEST("require that socket spec can be created directly from host and port") {
TEST_DO(verify_host_port(SocketSpec::from_host_port("my_host", 123), "my_host", 123));
}
TEST("require that socket spec can be created directly from port only") {
TEST_DO(verify_port(SocketSpec::from_port(123), 123));
}
TEST("require that socket spec parsing works as expected") {
TEST_DO(verify_invalid(SocketSpec("")));
TEST_DO(verify_invalid(SocketSpec("bogus")));
TEST_DO(verify_path(SocketSpec("ipc/file:my_path"), "my_path"));
TEST_DO(verify_invalid(SocketSpec("ipc/file:")));
TEST_DO(verify_name(SocketSpec("ipc/name:my_name"), "my_name"));
TEST_DO(verify_invalid(SocketSpec("ipc/name:")));
TEST_DO(verify_host_port(SocketSpec("tcp/my_host:123"), "my_host", 123));
TEST_DO(verify_port(SocketSpec("tcp/123"), 123));
TEST_DO(verify_port(SocketSpec("tcp/0"), 0));
TEST_DO(verify_invalid(SocketSpec("tcp/:123")));
TEST_DO(verify_invalid(SocketSpec("tcp/:0")));
TEST_DO(verify_invalid(SocketSpec("tcp/host:xyz")));
TEST_DO(verify_invalid(SocketSpec("tcp/xyz")));
TEST_DO(verify_invalid(SocketSpec("tcp/host:-123")));
TEST_DO(verify_invalid(SocketSpec("tcp/-123")));
TEST_DO(verify_invalid(SocketSpec("tcp/host:")));
TEST_DO(verify_invalid(SocketSpec("tcp/")));
TEST_DO(verify_host_port(SocketSpec("tcp/[my:host]:123"), "my:host", 123));
TEST_DO(verify_invalid(SocketSpec("tcp/[]:123")));
TEST_DO(verify_host_port(SocketSpec("tcp/[:123"), "[", 123));
TEST_DO(verify_host_port(SocketSpec("tcp/]:123"), "]", 123));
TEST_DO(verify_host_port(SocketSpec("tcp/my:host:123"), "my:host", 123));
}
TEST("require that socket spec to string transform works as expected") {
TEST_DO(verify_spec("invalid"));
TEST_DO(verify_spec("bogus", "invalid"));
TEST_DO(verify_spec("ipc/file:my_path"));
TEST_DO(verify_spec("ipc/name:my_name"));
TEST_DO(verify_spec("tcp/123"));
TEST_DO(verify_spec("tcp/0"));
TEST_DO(verify_spec("tcp/host:123"));
TEST_DO(verify_spec("tcp/[my:host]:123"));
TEST_DO(verify_spec("tcp/[host]:123", "tcp/host:123"));
}
TEST("require that port-only spec resolves to wildcard server address") {
EXPECT_TRUE(SocketSpec("tcp/123").server_address().is_wildcard());
}
TEST("require that port-only spec resolves to non-wildcard client address") {
EXPECT_TRUE(!SocketSpec("tcp/123").client_address().is_wildcard());
}
TEST_MAIN() { TEST_RUN_ALL(); }
|