Merge pull request #4363 from MagnumOpus21/master
Agent/Proxy : Fixes Windows's basic managed proxy support problem.
This commit is contained in:
commit
cb4efd5737
|
@ -427,7 +427,7 @@ func NewServerLogger(config *Config, logger *log.Logger, tokens *token.Store) (*
|
||||||
}
|
}
|
||||||
go s.Flood(nil, portFn, s.serfWAN)
|
go s.Flood(nil, portFn, s.serfWAN)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start enterprise specific functionality
|
// Start enterprise specific functionality
|
||||||
if err := s.startEnterprise(); err != nil {
|
if err := s.startEnterprise(); err != nil {
|
||||||
s.Shutdown()
|
s.Shutdown()
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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")
|
||||||
|
|
Loading…
Reference in New Issue