mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #36220 from dnephin/support-proxy-in-splunk-driver
Support a proxy in splunk log driver
This commit is contained in:
commit
f653485e57
3 changed files with 125 additions and 0 deletions
|
@ -218,6 +218,7 @@ func New(info logger.Info) (logger.Logger, error) {
|
||||||
|
|
||||||
transport := &http.Transport{
|
transport := &http.Transport{
|
||||||
TLSClientConfig: tlsConfig,
|
TLSClientConfig: tlsConfig,
|
||||||
|
Proxy: http.ProxyFromEnvironment,
|
||||||
}
|
}
|
||||||
client := &http.Client{
|
client := &http.Client{
|
||||||
Transport: transport,
|
Transport: transport,
|
||||||
|
|
|
@ -4,12 +4,14 @@ import (
|
||||||
"compress/gzip"
|
"compress/gzip"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/docker/docker/daemon/logger"
|
"github.com/docker/docker/daemon/logger"
|
||||||
|
"github.com/gotestyourself/gotestyourself/env"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -82,6 +84,36 @@ func TestNewMissedToken(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNewWithProxy(t *testing.T) {
|
||||||
|
proxy := "http://proxy.testing:8888"
|
||||||
|
reset := env.Patch(t, "HTTP_PROXY", proxy)
|
||||||
|
defer reset()
|
||||||
|
|
||||||
|
// must not be localhost
|
||||||
|
splunkURL := "http://example.com:12345"
|
||||||
|
logger, err := New(logger.Info{
|
||||||
|
Config: map[string]string{
|
||||||
|
splunkURLKey: splunkURL,
|
||||||
|
splunkTokenKey: "token",
|
||||||
|
splunkVerifyConnectionKey: "false",
|
||||||
|
},
|
||||||
|
ContainerID: "containeriid",
|
||||||
|
})
|
||||||
|
require.NoError(t, err)
|
||||||
|
splunkLogger := logger.(*splunkLoggerInline)
|
||||||
|
|
||||||
|
proxyFunc := splunkLogger.transport.Proxy
|
||||||
|
require.NotNil(t, proxyFunc)
|
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", splunkURL, nil)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
proxyURL, err := proxyFunc(req)
|
||||||
|
require.NoError(t, err)
|
||||||
|
require.NotNil(t, proxyURL)
|
||||||
|
require.Equal(t, proxy, proxyURL.String())
|
||||||
|
}
|
||||||
|
|
||||||
// Test default settings
|
// Test default settings
|
||||||
func TestDefault(t *testing.T) {
|
func TestDefault(t *testing.T) {
|
||||||
hec := NewHTTPEventCollectorMock(t)
|
hec := NewHTTPEventCollectorMock(t)
|
||||||
|
|
92
vendor/github.com/gotestyourself/gotestyourself/env/env.go
generated
vendored
Normal file
92
vendor/github.com/gotestyourself/gotestyourself/env/env.go
generated
vendored
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
/*Package env provides functions to test code that read environment variables
|
||||||
|
or the current working directory.
|
||||||
|
*/
|
||||||
|
package env
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/gotestyourself/gotestyourself/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
type helperT interface {
|
||||||
|
Helper()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Patch changes the value of an environment variable, and returns a
|
||||||
|
// function which will reset the the value of that variable back to the
|
||||||
|
// previous state.
|
||||||
|
func Patch(t assert.TestingT, key, value string) func() {
|
||||||
|
if ht, ok := t.(helperT); ok {
|
||||||
|
ht.Helper()
|
||||||
|
}
|
||||||
|
oldValue, ok := os.LookupEnv(key)
|
||||||
|
assert.NilError(t, os.Setenv(key, value))
|
||||||
|
return func() {
|
||||||
|
if ht, ok := t.(helperT); ok {
|
||||||
|
ht.Helper()
|
||||||
|
}
|
||||||
|
if !ok {
|
||||||
|
assert.NilError(t, os.Unsetenv(key))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
assert.NilError(t, os.Setenv(key, oldValue))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PatchAll sets the environment to env, and returns a function which will
|
||||||
|
// reset the environment back to the previous state.
|
||||||
|
func PatchAll(t assert.TestingT, env map[string]string) func() {
|
||||||
|
if ht, ok := t.(helperT); ok {
|
||||||
|
ht.Helper()
|
||||||
|
}
|
||||||
|
oldEnv := os.Environ()
|
||||||
|
os.Clearenv()
|
||||||
|
|
||||||
|
for key, value := range env {
|
||||||
|
assert.NilError(t, os.Setenv(key, value))
|
||||||
|
}
|
||||||
|
return func() {
|
||||||
|
if ht, ok := t.(helperT); ok {
|
||||||
|
ht.Helper()
|
||||||
|
}
|
||||||
|
os.Clearenv()
|
||||||
|
for key, oldVal := range ToMap(oldEnv) {
|
||||||
|
assert.NilError(t, os.Setenv(key, oldVal))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ToMap takes a list of strings in the format returned by os.Environ() and
|
||||||
|
// returns a mapping of keys to values.
|
||||||
|
func ToMap(env []string) map[string]string {
|
||||||
|
result := map[string]string{}
|
||||||
|
for _, raw := range env {
|
||||||
|
parts := strings.SplitN(raw, "=", 2)
|
||||||
|
switch len(parts) {
|
||||||
|
case 1:
|
||||||
|
result[raw] = ""
|
||||||
|
case 2:
|
||||||
|
result[parts[0]] = parts[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangeWorkingDir to the directory, and return a function which restores the
|
||||||
|
// previous working directory.
|
||||||
|
func ChangeWorkingDir(t assert.TestingT, dir string) func() {
|
||||||
|
if ht, ok := t.(helperT); ok {
|
||||||
|
ht.Helper()
|
||||||
|
}
|
||||||
|
cwd, err := os.Getwd()
|
||||||
|
assert.NilError(t, err)
|
||||||
|
assert.NilError(t, os.Chdir(dir))
|
||||||
|
return func() {
|
||||||
|
if ht, ok := t.(helperT); ok {
|
||||||
|
ht.Helper()
|
||||||
|
}
|
||||||
|
assert.NilError(t, os.Chdir(cwd))
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue