Merge pull request #4363 from MagnumOpus21/master

Agent/Proxy : Fixes Windows's basic managed proxy support problem.
This commit is contained in:
Siva Prasad 2018-07-09 13:24:02 -04:00 committed by GitHub
commit cb4efd5737
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 81 additions and 2 deletions

View File

@ -433,6 +433,9 @@ func (m *Manager) newProxy(mp *local.ManagedProxy) (Proxy, error) {
return nil, fmt.Errorf("error configuring proxy logs: %s", err) return nil, fmt.Errorf("error configuring proxy logs: %s", err)
} }
// Pass in the environmental variables for the proxy process
cmd.Env = os.Environ()
// Build the daemon structure // Build the daemon structure
proxy.Command = &cmd proxy.Command = &cmd
proxy.ProxyID = id proxy.ProxyID = id

View File

@ -5,6 +5,7 @@ import (
"os" "os"
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"sort"
"testing" "testing"
"time" "time"
@ -261,6 +262,50 @@ func TestManagerRun_daemonPid(t *testing.T) {
require.NotEmpty(pidRaw) require.NotEmpty(pidRaw)
} }
// Test to check if the parent and the child processes
// have the same environmental variables
func TestManagerPassesEnvironment(t *testing.T) {
t.Parallel()
require := require.New(t)
state := local.TestState(t)
m, closer := testManager(t)
defer closer()
m.State = state
defer m.Kill()
// Add Proxy for the test
td, closer := testTempDir(t)
defer closer()
path := filepath.Join(td, "env-variables")
testStateProxy(t, state, "environTest", helperProcess("environ", path))
//Run the manager
go m.Run()
//Get the environmental variables from the OS
var fileContent []byte
var err error
var data []byte
envData := os.Environ()
sort.Strings(envData)
for _, envVariable := range envData {
data = append(data, envVariable...)
data = append(data, "\n"...)
}
// Check if the file written to from the spawned process
// has the necessary environmental variable data
retry.Run(t, func(r *retry.R) {
if fileContent, err = ioutil.ReadFile(path); err != nil {
r.Fatalf("No file ya dummy")
}
})
require.Equal(fileContent, data)
}
// Test the Snapshot/Restore works. // Test the Snapshot/Restore works.
func TestManagerRun_snapshotRestore(t *testing.T) { func TestManagerRun_snapshotRestore(t *testing.T) {
t.Parallel() t.Parallel()

View File

@ -7,7 +7,9 @@ import (
"os" "os"
"os/exec" "os/exec"
"os/signal" "os/signal"
"sort"
"strconv" "strconv"
"strings"
"syscall" "syscall"
"testing" "testing"
"time" "time"
@ -124,7 +126,6 @@ func TestHelperProcess(t *testing.T) {
default: default:
} }
} }
case "stop-kill": case "stop-kill":
// Setup listeners so it is ignored // Setup listeners so it is ignored
ch := make(chan os.Signal, 1) ch := make(chan os.Signal, 1)
@ -139,6 +140,36 @@ func TestHelperProcess(t *testing.T) {
} }
time.Sleep(25 * time.Millisecond) time.Sleep(25 * time.Millisecond)
} }
// Check if the external process can access the enivironmental variables
case "environ":
stop := make(chan os.Signal, 1)
signal.Notify(stop, os.Interrupt)
defer signal.Stop(stop)
//Get the path for the file to be written to
path := args[0]
var data []byte
//Get the environmental variables
envData := os.Environ()
//Sort the env data for easier comparison
sort.Strings(envData)
for _, envVariable := range envData {
if strings.HasPrefix(envVariable, "CONSUL") || strings.HasPrefix(envVariable, "CONNECT") {
continue
}
data = append(data, envVariable...)
data = append(data, "\n"...)
}
if err := ioutil.WriteFile(path, data, 0644); err != nil {
t.Fatalf("[Error] File write failed : %s", err)
}
// Clean up after we receive the signal to exit
defer os.Remove(path)
<-stop
case "output": case "output":
fmt.Fprintf(os.Stdout, "hello stdout\n") fmt.Fprintf(os.Stdout, "hello stdout\n")