mirror of
https://github.com/status-im/consul.git
synced 2025-01-11 14:24:39 +00:00
Remove unnecessary ClientListenerAddr function. Rework config test functions to be cleaner. Start of runtime tests.
This code is copyright 2014 Akamai Technologies, Inc. <opensource@akamai.com>
This commit is contained in:
parent
8362e3e9eb
commit
0cc009c480
@ -7,8 +7,10 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
"os/user"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"reflect"
|
"reflect"
|
||||||
|
"runtime"
|
||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
@ -123,7 +125,7 @@ func TestAgentStartStop(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAgent_RPCPing(t *testing.T) {
|
func TestAgent_RPCPingTCP(t *testing.T) {
|
||||||
dir, agent := makeAgent(t, nextConfig())
|
dir, agent := makeAgent(t, nextConfig())
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
defer agent.Shutdown()
|
defer agent.Shutdown()
|
||||||
@ -134,6 +136,35 @@ func TestAgent_RPCPing(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAgent_RPCPingUnix(t *testing.T) {
|
||||||
|
if runtime.GOOS == "windows" {
|
||||||
|
t.SkipNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
nextConf := nextConfig()
|
||||||
|
|
||||||
|
tempdir, err := ioutil.TempDir("", "consul-test-")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("Could not create a working directory")
|
||||||
|
}
|
||||||
|
|
||||||
|
user, err := user.Current()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("Could not get current user")
|
||||||
|
}
|
||||||
|
|
||||||
|
nextConf.Addresses.RPC = "unix://" + tempdir + "/unix-rpc-test.sock;" + user.Uid + ";" + user.Gid + ";640"
|
||||||
|
|
||||||
|
dir, agent := makeAgent(t, nextConf)
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
defer agent.Shutdown()
|
||||||
|
|
||||||
|
var out struct{}
|
||||||
|
if err := agent.RPC("Status.Ping", struct{}{}, &out); err != nil {
|
||||||
|
t.Fatalf("err: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestAgent_AddService(t *testing.T) {
|
func TestAgent_AddService(t *testing.T) {
|
||||||
dir, agent := makeAgent(t, nextConfig())
|
dir, agent := makeAgent(t, nextConfig())
|
||||||
defer os.RemoveAll(dir)
|
defer os.RemoveAll(dir)
|
||||||
|
@ -589,7 +589,7 @@ func (c *Command) Run(args []string) int {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the new client http listener addr
|
// Get the new client http listener addr
|
||||||
httpAddr, err := config.ClientListenerAddr(config.Addresses.HTTP, config.Ports.HTTP)
|
httpAddr, err := config.ClientListener(config.Addresses.HTTP, config.Ports.HTTP)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to determine HTTP address: %v", err))
|
c.Ui.Error(fmt.Sprintf("Failed to determine HTTP address: %v", err))
|
||||||
}
|
}
|
||||||
@ -599,7 +599,7 @@ func (c *Command) Run(args []string) int {
|
|||||||
go func(wp *watch.WatchPlan) {
|
go func(wp *watch.WatchPlan) {
|
||||||
wp.Handler = makeWatchHandler(logOutput, wp.Exempt["handler"])
|
wp.Handler = makeWatchHandler(logOutput, wp.Exempt["handler"])
|
||||||
wp.LogOutput = c.logOutput
|
wp.LogOutput = c.logOutput
|
||||||
if err := wp.Run(httpAddr); err != nil {
|
if err := wp.Run(httpAddr.String()); err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Error running watch: %v", err))
|
c.Ui.Error(fmt.Sprintf("Error running watch: %v", err))
|
||||||
}
|
}
|
||||||
}(wp)
|
}(wp)
|
||||||
@ -758,7 +758,7 @@ func (c *Command) handleReload(config *Config) *Config {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the new client listener addr
|
// Get the new client listener addr
|
||||||
httpAddr, err := newConf.ClientListenerAddr(config.Addresses.HTTP, config.Ports.HTTP)
|
httpAddr, err := newConf.ClientListener(config.Addresses.HTTP, config.Ports.HTTP)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Failed to determine HTTP address: %v", err))
|
c.Ui.Error(fmt.Sprintf("Failed to determine HTTP address: %v", err))
|
||||||
}
|
}
|
||||||
@ -773,7 +773,7 @@ func (c *Command) handleReload(config *Config) *Config {
|
|||||||
go func(wp *watch.WatchPlan) {
|
go func(wp *watch.WatchPlan) {
|
||||||
wp.Handler = makeWatchHandler(c.logOutput, wp.Exempt["handler"])
|
wp.Handler = makeWatchHandler(c.logOutput, wp.Exempt["handler"])
|
||||||
wp.LogOutput = c.logOutput
|
wp.LogOutput = c.logOutput
|
||||||
if err := wp.Run(httpAddr); err != nil {
|
if err := wp.Run(httpAddr.String()); err != nil {
|
||||||
c.Ui.Error(fmt.Sprintf("Error running watch: %v", err))
|
c.Ui.Error(fmt.Sprintf("Error running watch: %v", err))
|
||||||
}
|
}
|
||||||
}(wp)
|
}(wp)
|
||||||
|
@ -500,26 +500,19 @@ func (c *Config) ClientListener(override string, port int) (net.Addr, error) {
|
|||||||
if ip == nil {
|
if ip == nil {
|
||||||
return nil, fmt.Errorf("Failed to parse IP: %v", addr)
|
return nil, fmt.Errorf("Failed to parse IP: %v", addr)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ip.IsUnspecified() {
|
||||||
|
ip = net.ParseIP("127.0.0.1")
|
||||||
|
}
|
||||||
|
|
||||||
|
if ip == nil {
|
||||||
|
return nil, fmt.Errorf("Failed to parse IP 127.0.0.1")
|
||||||
|
}
|
||||||
|
|
||||||
return &net.TCPAddr{IP: ip, Port: port}, nil
|
return &net.TCPAddr{IP: ip, Port: port}, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ClientListenerAddr is used to format an address for a
|
|
||||||
// port on a ClientAddr, handling the zero IP.
|
|
||||||
func (c *Config) ClientListenerAddr(override string, port int) (string, error) {
|
|
||||||
addr, err := c.ClientListener(override, port)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
if ipAddr, ok := addr.(*net.TCPAddr); ok {
|
|
||||||
if ipAddr.IP.IsUnspecified() {
|
|
||||||
ipAddr.IP = net.ParseIP("127.0.0.1")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return addr.String(), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// DecodeConfig reads the configuration from the given reader in JSON
|
// DecodeConfig reads the configuration from the given reader in JSON
|
||||||
// format and decodes it into a proper Config structure.
|
// format and decodes it into a proper Config structure.
|
||||||
func DecodeConfig(r io.Reader) (*Config, error) {
|
func DecodeConfig(r io.Reader) (*Config, error) {
|
||||||
|
@ -1076,17 +1076,7 @@ func TestUnixSockets(t *testing.T) {
|
|||||||
t.SkipNow()
|
t.SkipNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := populateUnixSocket("tcp://abc123")
|
usr, err := user.Current()
|
||||||
if err == nil {
|
|
||||||
t.Fatal("Should have rejected invalid scheme")
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://x;y;z")
|
|
||||||
if err == nil {
|
|
||||||
t.Fatal("Should have rejected invalid number of parameters in Unix socket definition")
|
|
||||||
}
|
|
||||||
|
|
||||||
user, err := user.Current()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Could not get current user")
|
t.Fatal("Could not get current user")
|
||||||
}
|
}
|
||||||
@ -1096,39 +1086,86 @@ func TestUnixSockets(t *testing.T) {
|
|||||||
t.Fatal("Could not create a working directory")
|
t.Fatal("Could not create a working directory")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;osdfjo9ihf9h82;" + user.Gid + ";640")
|
type SocketTestData struct {
|
||||||
|
Path string
|
||||||
|
Uid string
|
||||||
|
Gid string
|
||||||
|
Mode string
|
||||||
|
}
|
||||||
|
|
||||||
|
testUnixSocketPopulation := func(s SocketTestData) (*UnixSocket, error) {
|
||||||
|
return populateUnixSocket("unix://" + s.Path + ";" + s.Uid + ";" + s.Gid + ";" + s.Mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
testUnixSocketPermissions := func(s SocketTestData) error {
|
||||||
|
return adjustUnixSocketPermissions("unix://" + s.Path + ";" + s.Uid + ";" + s.Gid + ";" + s.Mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = populateUnixSocket("tcp://abc123")
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("Should have rejected invalid scheme")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = populateUnixSocket("unix://x;y;z")
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("Should have rejected invalid number of parameters in Unix socket definition")
|
||||||
|
}
|
||||||
|
|
||||||
|
std := SocketTestData{
|
||||||
|
Path: tempdir + "/unix-config-test.sock",
|
||||||
|
Uid: usr.Uid,
|
||||||
|
Gid: usr.Gid,
|
||||||
|
Mode: "640",
|
||||||
|
}
|
||||||
|
|
||||||
|
std.Uid = "orasdfdsnfoinweroiu"
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Did not error on invalid username")
|
t.Fatal("Did not error on invalid username")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;999999;" + user.Gid + ";640")
|
std.Uid = "999999"
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Did not error on invalid uid")
|
t.Fatal("Did not error on invalid uid")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;" + user.Username + ";foihafwereworg;" + ";640")
|
std.Uid = usr.Username
|
||||||
|
std.Gid = "foinfphawepofhewof"
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Did not error on invalid group (a name, must be gid)")
|
t.Fatal("Did not error on invalid group (a name, must be gid)")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;" + user.Username + ";999999;" + ";640")
|
std.Uid = usr.Uid
|
||||||
|
std.Gid = "999999"
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Did not error on invalid uid")
|
t.Fatal("Did not error on invalid uid")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;" + user.Username + ";" + user.Gid + ";999")
|
std.Gid = usr.Gid
|
||||||
|
std.Mode = "999"
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("Did not error on invalid socket mode")
|
t.Fatal("Did not error on invalid socket mode")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;" + user.Username + ";" + user.Gid + ";640")
|
std.Uid = usr.Username
|
||||||
|
std.Mode = "640"
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Unix socket test failed for no obvious reason (using username)")
|
t.Fatal("Unix socket test failed for no obvious reason (using username)")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = populateUnixSocket("unix://" + tempdir + "/unixtest.sock;" + user.Uid + ";" + user.Gid + ";640")
|
std.Uid = usr.Uid
|
||||||
|
_, err = testUnixSocketPopulation(std)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("Unix socket test failed for no obvious reason (using uid)")
|
t.Fatal("Unix socket test failed for no obvious reason (using uid)")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = testUnixSocketPermissions(std)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal("Adjusting socket permissions failed for no obvious reason")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user