Switch node management tests to api types
Signed-off-by: Tonis Tiigi <tonistiigi@gmail.com>
This commit is contained in:
parent
39211d113b
commit
22b34d6449
3 changed files with 74 additions and 51 deletions
|
@ -8,6 +8,7 @@ import (
|
|||
|
||||
"github.com/docker/docker/cliconfig"
|
||||
"github.com/docker/docker/pkg/reexec"
|
||||
"github.com/docker/engine-api/types/swarm"
|
||||
"github.com/go-check/check"
|
||||
)
|
||||
|
||||
|
@ -213,12 +214,15 @@ func (s *DockerSwarmSuite) AddDaemon(c *check.C, joinSwarm, manager bool) *Swarm
|
|||
|
||||
if joinSwarm == true {
|
||||
if len(s.daemons) > 0 {
|
||||
c.Assert(d.Join(s.daemons[0].listenAddr, "", "", manager), check.IsNil)
|
||||
c.Assert(d.Join(swarm.JoinRequest{
|
||||
RemoteAddrs: []string{s.daemons[0].listenAddr},
|
||||
Manager: manager}), check.IsNil)
|
||||
} else {
|
||||
aa := make(map[string]bool)
|
||||
aa["worker"] = true
|
||||
aa["manager"] = true
|
||||
c.Assert(d.Init(aa, ""), check.IsNil)
|
||||
c.Assert(d.Init(swarm.InitRequest{
|
||||
Spec: swarm.Spec{
|
||||
AcceptancePolicy: autoAcceptPolicy,
|
||||
},
|
||||
}), check.IsNil)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -21,22 +21,18 @@ type SwarmDaemon struct {
|
|||
listenAddr string
|
||||
}
|
||||
|
||||
// default policy in tests is allow-all
|
||||
var autoAcceptPolicy = swarm.AcceptancePolicy{
|
||||
Policies: []swarm.Policy{
|
||||
{Role: swarm.NodeRoleWorker, Autoaccept: true},
|
||||
{Role: swarm.NodeRoleManager, Autoaccept: true},
|
||||
},
|
||||
}
|
||||
|
||||
// Init initializes a new swarm cluster.
|
||||
func (d *SwarmDaemon) Init(autoAccept map[string]bool, secret string) error {
|
||||
req := swarm.InitRequest{
|
||||
ListenAddr: d.listenAddr,
|
||||
}
|
||||
for _, role := range []swarm.NodeRole{swarm.NodeRoleManager, swarm.NodeRoleWorker} {
|
||||
policy := swarm.Policy{
|
||||
Role: role,
|
||||
Autoaccept: autoAccept[strings.ToLower(string(role))],
|
||||
}
|
||||
|
||||
if secret != "" {
|
||||
policy.Secret = &secret
|
||||
}
|
||||
|
||||
req.Spec.AcceptancePolicy.Policies = append(req.Spec.AcceptancePolicy.Policies, policy)
|
||||
func (d *SwarmDaemon) Init(req swarm.InitRequest) error {
|
||||
if req.ListenAddr == "" {
|
||||
req.ListenAddr = d.listenAddr
|
||||
}
|
||||
status, out, err := d.SockRequest("POST", "/swarm/init", req)
|
||||
if status != http.StatusOK {
|
||||
|
@ -53,17 +49,10 @@ func (d *SwarmDaemon) Init(autoAccept map[string]bool, secret string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Join joins a current daemon with existing cluster.
|
||||
func (d *SwarmDaemon) Join(remoteAddr, secret, cahash string, manager bool) error {
|
||||
req := swarm.JoinRequest{
|
||||
ListenAddr: d.listenAddr,
|
||||
RemoteAddrs: []string{remoteAddr},
|
||||
Manager: manager,
|
||||
CACertHash: cahash,
|
||||
}
|
||||
|
||||
if secret != "" {
|
||||
req.Secret = secret
|
||||
// Join joins a daemon to an existing cluster.
|
||||
func (d *SwarmDaemon) Join(req swarm.JoinRequest) error {
|
||||
if req.ListenAddr == "" {
|
||||
req.ListenAddr = d.listenAddr
|
||||
}
|
||||
status, out, err := d.SockRequest("POST", "/swarm/join", req)
|
||||
if status != http.StatusOK {
|
||||
|
|
|
@ -38,7 +38,7 @@ func (s *DockerSwarmSuite) TestApiSwarmInit(c *check.C) {
|
|||
c.Assert(info.ControlAvailable, checker.Equals, false)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
|
||||
|
||||
c.Assert(d2.Join(d1.listenAddr, "", "", false), checker.IsNil)
|
||||
c.Assert(d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
||||
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
|
@ -76,10 +76,19 @@ func (s *DockerSwarmSuite) TestApiSwarmManualAcceptanceSecret(c *check.C) {
|
|||
|
||||
func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret string) {
|
||||
d1 := s.AddDaemon(c, false, false)
|
||||
c.Assert(d1.Init(map[string]bool{}, secret), checker.IsNil)
|
||||
c.Assert(d1.Init(swarm.InitRequest{
|
||||
Spec: swarm.Spec{
|
||||
AcceptancePolicy: swarm.AcceptancePolicy{
|
||||
Policies: []swarm.Policy{
|
||||
{Role: swarm.NodeRoleWorker, Secret: &secret},
|
||||
{Role: swarm.NodeRoleManager, Secret: &secret},
|
||||
},
|
||||
},
|
||||
},
|
||||
}), checker.IsNil)
|
||||
|
||||
d2 := s.AddDaemon(c, false, false)
|
||||
err := d2.Join(d1.listenAddr, "", "", false)
|
||||
err := d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}})
|
||||
c.Assert(err, checker.NotNil)
|
||||
if secret == "" {
|
||||
c.Assert(err.Error(), checker.Contains, "needs to be accepted")
|
||||
|
@ -97,7 +106,7 @@ func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret strin
|
|||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
|
||||
}
|
||||
d3 := s.AddDaemon(c, false, false)
|
||||
c.Assert(d3.Join(d1.listenAddr, secret, "", false), checker.NotNil)
|
||||
c.Assert(d3.Join(swarm.JoinRequest{Secret: secret, RemoteAddrs: []string{d1.listenAddr}}), checker.NotNil)
|
||||
info, err := d3.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStatePending)
|
||||
|
@ -120,26 +129,34 @@ func (s *DockerSwarmSuite) testAPISwarmManualAcceptance(c *check.C, secret strin
|
|||
|
||||
func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
|
||||
d1 := s.AddDaemon(c, false, false)
|
||||
aa := make(map[string]bool)
|
||||
aa["worker"] = true
|
||||
c.Assert(d1.Init(aa, "foobar"), checker.IsNil)
|
||||
secret := "foobar"
|
||||
c.Assert(d1.Init(swarm.InitRequest{
|
||||
Spec: swarm.Spec{
|
||||
AcceptancePolicy: swarm.AcceptancePolicy{
|
||||
Policies: []swarm.Policy{
|
||||
{Role: swarm.NodeRoleWorker, Autoaccept: true, Secret: &secret},
|
||||
{Role: swarm.NodeRoleManager, Secret: &secret},
|
||||
},
|
||||
},
|
||||
},
|
||||
}), checker.IsNil)
|
||||
|
||||
d2 := s.AddDaemon(c, false, false)
|
||||
err := d2.Join(d1.listenAddr, "", "", false)
|
||||
err := d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}})
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(err.Error(), checker.Contains, "secret token is necessary")
|
||||
info, err := d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
|
||||
|
||||
err = d2.Join(d1.listenAddr, "foobaz", "", false)
|
||||
err = d2.Join(swarm.JoinRequest{Secret: "foobaz", RemoteAddrs: []string{d1.listenAddr}})
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(err.Error(), checker.Contains, "secret token is necessary")
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
|
||||
|
||||
c.Assert(d2.Join(d1.listenAddr, "foobar", "", false), checker.IsNil)
|
||||
c.Assert(d2.Join(swarm.JoinRequest{Secret: "foobar", RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
|
||||
|
@ -156,14 +173,14 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
|
|||
}
|
||||
})
|
||||
|
||||
err = d2.Join(d1.listenAddr, "foobar", "", false)
|
||||
err = d2.Join(swarm.JoinRequest{Secret: "foobar", RemoteAddrs: []string{d1.listenAddr}})
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(err.Error(), checker.Contains, "secret token is necessary")
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
|
||||
|
||||
c.Assert(d2.Join(d1.listenAddr, "foobaz", "", false), checker.IsNil)
|
||||
c.Assert(d2.Join(swarm.JoinRequest{Secret: "foobaz", RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
|
||||
|
@ -182,14 +199,14 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
|
|||
}
|
||||
})
|
||||
|
||||
err = d2.Join(d1.listenAddr, "", "", false)
|
||||
err = d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}})
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(err.Error(), checker.Contains, "secret token is necessary")
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateInactive)
|
||||
|
||||
c.Assert(d2.Join(d1.listenAddr, "foobaz", "", false), checker.IsNil)
|
||||
c.Assert(d2.Join(swarm.JoinRequest{Secret: "foobaz", RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
|
||||
|
@ -206,7 +223,7 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
|
|||
}
|
||||
})
|
||||
|
||||
c.Assert(d2.Join(d1.listenAddr, "", "", false), checker.IsNil)
|
||||
c.Assert(d2.Join(swarm.JoinRequest{RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
||||
info, err = d2.info()
|
||||
c.Assert(err, checker.IsNil)
|
||||
c.Assert(info.LocalNodeState, checker.Equals, swarm.LocalNodeStateActive)
|
||||
|
@ -220,17 +237,26 @@ func (s *DockerSwarmSuite) TestApiSwarmSecretAcceptance(c *check.C) {
|
|||
func (s *DockerSwarmSuite) TestApiSwarmCAHash(c *check.C) {
|
||||
d1 := s.AddDaemon(c, true, true)
|
||||
d2 := s.AddDaemon(c, false, false)
|
||||
err := d2.Join(d1.listenAddr, "", "foobar", false)
|
||||
err := d2.Join(swarm.JoinRequest{CACertHash: "foobar", RemoteAddrs: []string{d1.listenAddr}})
|
||||
c.Assert(err, checker.NotNil)
|
||||
c.Assert(err.Error(), checker.Contains, "invalid checksum digest format")
|
||||
|
||||
c.Assert(len(d1.CACertHash), checker.GreaterThan, 0)
|
||||
c.Assert(d2.Join(d1.listenAddr, "", d1.CACertHash, false), checker.IsNil)
|
||||
c.Assert(d2.Join(swarm.JoinRequest{CACertHash: d1.CACertHash, RemoteAddrs: []string{d1.listenAddr}}), checker.IsNil)
|
||||
}
|
||||
|
||||
func (s *DockerSwarmSuite) TestApiSwarmPromoteDemote(c *check.C) {
|
||||
d1 := s.AddDaemon(c, false, false)
|
||||
c.Assert(d1.Init(map[string]bool{"worker": true}, ""), checker.IsNil)
|
||||
c.Assert(d1.Init(swarm.InitRequest{
|
||||
Spec: swarm.Spec{
|
||||
AcceptancePolicy: swarm.AcceptancePolicy{
|
||||
Policies: []swarm.Policy{
|
||||
{Role: swarm.NodeRoleWorker, Autoaccept: true},
|
||||
{Role: swarm.NodeRoleManager},
|
||||
},
|
||||
},
|
||||
},
|
||||
}), checker.IsNil)
|
||||
d2 := s.AddDaemon(c, true, false)
|
||||
|
||||
info, err := d2.info()
|
||||
|
@ -561,7 +587,9 @@ func (s *DockerSwarmSuite) TestApiSwarmLeaveOnPendingJoin(c *check.C) {
|
|||
c.Assert(err, checker.IsNil)
|
||||
id = strings.TrimSpace(id)
|
||||
|
||||
go d2.Join("nosuchhost:1234", "", "", false) // will block on pending state
|
||||
go d2.Join(swarm.JoinRequest{
|
||||
RemoteAddrs: []string{"nosuchhost:1234"},
|
||||
}) // will block on pending state
|
||||
|
||||
for i := 0; ; i++ {
|
||||
info, err := d2.info()
|
||||
|
@ -587,7 +615,9 @@ func (s *DockerSwarmSuite) TestApiSwarmLeaveOnPendingJoin(c *check.C) {
|
|||
// #23705
|
||||
func (s *DockerSwarmSuite) TestApiSwarmRestoreOnPendingJoin(c *check.C) {
|
||||
d := s.AddDaemon(c, false, false)
|
||||
go d.Join("nosuchhost:1234", "", "", false) // will block on pending state
|
||||
go d.Join(swarm.JoinRequest{
|
||||
RemoteAddrs: []string{"nosuchhost:1234"},
|
||||
}) // will block on pending state
|
||||
|
||||
for i := 0; ; i++ {
|
||||
info, err := d.info()
|
||||
|
|
Loading…
Reference in a new issue