mirror of https://github.com/status-im/consul.git
Merge pull request #4363 from MagnumOpus21/master
Agent/Proxy : Fixes Windows's basic managed proxy support problem.
This commit is contained in:
commit
fbc5017d5d
|
@ -427,7 +427,7 @@ func NewServerLogger(config *Config, logger *log.Logger, tokens *token.Store) (*
|
|||
}
|
||||
go s.Flood(nil, portFn, s.serfWAN)
|
||||
}
|
||||
|
||||
|
||||
// Start enterprise specific functionality
|
||||
if err := s.startEnterprise(); err != nil {
|
||||
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)
|
||||
}
|
||||
|
||||
// Pass in the environmental variables for the proxy process
|
||||
cmd.Env = os.Environ()
|
||||
|
||||
// Build the daemon structure
|
||||
proxy.Command = &cmd
|
||||
proxy.ProxyID = id
|
||||
|
|
|
@ -5,6 +5,7 @@ import (
|
|||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
|
@ -261,6 +262,50 @@ func TestManagerRun_daemonPid(t *testing.T) {
|
|||
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.
|
||||
func TestManagerRun_snapshotRestore(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
|
|
@ -7,7 +7,9 @@ import (
|
|||
"os"
|
||||
"os/exec"
|
||||
"os/signal"
|
||||
"sort"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall"
|
||||
"testing"
|
||||
"time"
|
||||
|
@ -124,7 +126,6 @@ func TestHelperProcess(t *testing.T) {
|
|||
default:
|
||||
}
|
||||
}
|
||||
|
||||
case "stop-kill":
|
||||
// Setup listeners so it is ignored
|
||||
ch := make(chan os.Signal, 1)
|
||||
|
@ -139,6 +140,36 @@ func TestHelperProcess(t *testing.T) {
|
|||
}
|
||||
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":
|
||||
fmt.Fprintf(os.Stdout, "hello stdout\n")
|
||||
|
|
Loading…
Reference in New Issue