talos/pkg/userdata/generate/generate_test.go
Seán C McCord ae77d6e053 fix: format IPv6 host entries properly
This reworks a bunch of the formatting for the userdata generation to
output a cleaner talos config when using IPv6 masters and `osctl config
generate`.

Please note that this changes the scope of concern for master indexing,
keeping `osctl` blissfully unaware of the master-reference chaining.
All it does is report the index of the master it is trying to generate.
The generator itself handles the reference chaining.

Fixes #916, fixes #917, and fixes #918

Signed-off-by: Seán C McCord <ulexus@gmail.com>
2019-08-12 11:35:38 -07:00

142 lines
4.1 KiB
Go

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package generate_test
import (
"fmt"
"net"
"testing"
"github.com/stretchr/testify/suite"
"github.com/talos-systems/talos/pkg/userdata"
"github.com/talos-systems/talos/pkg/userdata/generate"
"gopkg.in/yaml.v2"
)
var (
input *generate.Input
inputv6 *generate.Input
)
type GenerateSuite struct {
suite.Suite
}
func TestGenerateSuite(t *testing.T) {
suite.Run(t, new(GenerateSuite))
}
func (suite *GenerateSuite) SetupSuite() {
var err error
input, err = generate.NewInput("test", []string{"10.0.1.5", "10.0.1.6", "10.0.1.7"})
suite.Require().NoError(err)
inputv6, err = generate.NewInput("test", []string{"2001:db8::1", "2001:db8::2", "2001:db8::3"})
suite.Require().NoError(err)
}
// TODO: this is triggering a false positive for the dupl test, between TestGenerateControlPlaneSuccess
// nolint: dupl
func (suite *GenerateSuite) TestGenerateInitSuccess() {
input.IP = net.ParseIP("10.0.1.5")
dataString, err := generate.Userdata(generate.TypeInit, input)
suite.Require().NoError(err)
data := &userdata.UserData{}
err = yaml.Unmarshal([]byte(dataString), data)
suite.Require().NoError(err)
inputv6.IP = net.ParseIP("2001:db8::1")
dataString, err = generate.Userdata(generate.TypeInit, inputv6)
suite.Require().NoError(err)
data = &userdata.UserData{}
err = yaml.Unmarshal([]byte(dataString), data)
suite.Require().NoError(err)
}
// TODO: this is triggering a false positive for the dupl test, between TestGenerateInitSuccess
// nolint: dupl
func (suite *GenerateSuite) TestGenerateControlPlaneSuccess() {
input.IP = net.ParseIP("10.0.1.6")
dataString, err := generate.Userdata(generate.TypeControlPlane, input)
suite.Require().NoError(err)
data := &userdata.UserData{}
err = yaml.Unmarshal([]byte(dataString), data)
suite.Require().NoError(err)
inputv6.IP = net.ParseIP("2001:db8::2")
dataString, err = generate.Userdata(generate.TypeControlPlane, inputv6)
suite.Require().NoError(err)
data = &userdata.UserData{}
err = yaml.Unmarshal([]byte(dataString), data)
suite.Require().NoError(err)
}
func (suite *GenerateSuite) TestGenerateWorkerSuccess() {
dataString, err := generate.Userdata(generate.TypeJoin, input)
suite.Require().NoError(err)
data := &userdata.UserData{}
err = yaml.Unmarshal([]byte(dataString), data)
suite.Require().NoError(err)
dataString, err = generate.Userdata(generate.TypeJoin, inputv6)
suite.Require().NoError(err)
data = &userdata.UserData{}
err = yaml.Unmarshal([]byte(dataString), data)
suite.Require().NoError(err)
}
func (suite *GenerateSuite) TestGenerateTalosconfigSuccess() {
_, err := generate.Talosconfig(input)
suite.Require().NoError(err)
_, err = generate.Talosconfig(inputv6)
suite.Require().NoError(err)
}
func (suite *GenerateSuite) TestGetControlPlaneEndpoint() {
ep := input.GetControlPlaneEndpoint("6443")
suite.Require().Equal(input.MasterIPs[0]+":6443", ep)
ep = input.GetControlPlaneEndpoint("443")
suite.Require().Equal(input.MasterIPs[0]+":443", ep)
ep = inputv6.GetControlPlaneEndpoint("6443")
suite.Require().Equal(fmt.Sprintf("[%s]:6443", inputv6.MasterIPs[0]), ep)
ep = input.GetControlPlaneEndpoint("")
suite.Require().Equal(input.MasterIPs[0], ep)
ep = inputv6.GetControlPlaneEndpoint("")
suite.Require().Equal(fmt.Sprintf("[%s]", inputv6.MasterIPs[0]), ep)
inputv6.IP = net.ParseIP("2001:db8::1")
inputv6.Index = 0
suite.Require().Equal(
fmt.Sprintf("[%s]", inputv6.MasterIPs[0]),
inputv6.GetControlPlaneEndpoint(""),
)
inputv6.IP = net.ParseIP("2001:db8::2")
inputv6.Index = 1
suite.Require().Equal(
fmt.Sprintf("[%s]", inputv6.MasterIPs[0]),
inputv6.GetControlPlaneEndpoint(""),
)
inputv6.IP = net.ParseIP("2001:db8::3")
inputv6.Index = 2
suite.Require().Equal(
fmt.Sprintf("[%s]", inputv6.MasterIPs[1]),
inputv6.GetControlPlaneEndpoint(""),
)
inputv6.IP = net.ParseIP("2001:db8::d")
inputv6.Index = 0
suite.Require().Equal(
fmt.Sprintf("[%s]", inputv6.MasterIPs[0]),
inputv6.GetControlPlaneEndpoint(""),
)
}