forked from envoyproxy/envoy
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathenvironment.h
131 lines (112 loc) · 4.5 KB
/
environment.h
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
#pragma once
#include <cstdint>
#include <string>
#include <unordered_map>
#include <vector>
#include "envoy/network/address.h"
#include "envoy/server/options.h"
#include "common/json/json_loader.h"
namespace Envoy {
class TestEnvironment {
public:
typedef std::unordered_map<std::string, uint32_t> PortMap;
/**
* Initialize command-line options for later access by tests in getOptions().
* @param argc number of command-line args.
* @param argv array of command-line args.
*/
static void initializeOptions(int argc, char** argv);
/**
* Check whether testing with IP version type {v4 or v6} is enabled via
* setting the environment variable ENVOY_IP_TEST_VERSIONS.
* @param Network::Address::IpVersion IP address version to check.
* @return bool if testing only with IP type addresses only.
*/
static bool shouldRunTestForIpVersion(Network::Address::IpVersion type);
/**
* Return a vector of IP address parameters to test. Tests can be run with
* only IPv4 addressing or only IPv6 addressing by setting the environment
* variable ENVOY_IP_TEST_VERSIONS to "v4only" or "v6only", respectively.
* The default test setting runs all tests with both IPv4 and IPv6 addresses.
* @return std::vector<Network::Address::IpVersion> vector of IP address
* types to test.
*/
static std::vector<Network::Address::IpVersion> getIpVersionsForTest();
/**
* Obtain command-line options reference.
* @return Server::Options& with command-line options.
*/
static Server::Options& getOptions();
/**
* Obtain the value of an environment variable, die if not available.
* @return std::string with the value of the environment variable.
*/
static std::string getCheckedEnvVar(const std::string& var);
/**
* Obtain a private writable temporary directory.
* @return const std::string& with the path to the temporary directory.
*/
static const std::string& temporaryDirectory();
/**
* Prefix a given path with the private writable test temporary directory.
* @param path path suffix.
* @return std::string path qualified with temporary directory.
*/
static std::string temporaryPath(const std::string& path) {
return temporaryDirectory() + "/" + path;
}
/**
* Obtain read-only test input data directory.
* @return const std::string& with the path to the read-only test input directory.
*/
static const std::string& runfilesDirectory();
/**
* Prefix a given path with the read-only test input data directory.
* @param path path suffix.
* @return std::string path qualified with read-only test input data directory.
*/
static std::string runfilesPath(const std::string& path) {
return runfilesDirectory() + "/" + path;
}
/**
* Obtain Unix Domain Socket temporary directory.
* @return std::string& with the path to the Unix Domain Socket temporary directory.
*/
static const std::string unixDomainSocketDirectory();
/**
* Prefix a given path with the Unix Domain Socket temporary directory.
* @param path path suffix.
* @return std::string path qualified with the Unix Domain Socket temporary directory.
*/
static std::string unixDomainSocketPath(const std::string& path) {
return unixDomainSocketDirectory() + "/" + path;
}
/**
* String environment path substitution.
* @param str string with template patterns including {{ test_tmpdir }}.
* @return std::string with patterns replaced with environment values.
*/
static std::string substitute(const std::string str);
/**
* Substitue ports, paths, and IP loopback addressses in a JSON file in the
* private writable test temporary directory.
* @param path path prefix for the input file with port and path templates.
* @param port_map map from port name to port number.
* @param version IP address version to substitute.
* @return std::string path for the generated file.
*/
static std::string temporaryFileSubstitute(const std::string& path, const PortMap& port_map,
Network::Address::IpVersion version);
/**
* Build JSON object from a string subject to environment path substitution.
* @param json JSON with template patterns including {{ test_certs }}.
* @return Json::ObjectSharedPtr with built JSON object.
*/
static Json::ObjectSharedPtr jsonLoadFromString(const std::string& json);
/**
* Execute a program under ::system. Any failure is fatal.
* @param args program path and arguments.
*/
static void exec(const std::vector<std::string>& args);
};
} // Envoy