feat: Validate userdata (#593)

* feat: Validate userdata

Signed-off-by: Brad Beam <brad.beam@talos-systems.com>
This commit is contained in:
Brad Beam
2019-05-02 13:10:16 -05:00
committed by GitHub
parent e4c5385f3d
commit a5d31d97ff
17 changed files with 1068 additions and 322 deletions

View File

@@ -5,17 +5,70 @@
package userdata
import (
"io/ioutil"
"log"
"net/http"
"net/http/httptest"
"os"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
yaml "gopkg.in/yaml.v2"
)
type validateSuite struct {
suite.Suite
}
func TestValidateSuite(t *testing.T) {
suite.Run(t, new(validateSuite))
}
func (suite *validateSuite) TestDownloadRetry() {
// Disable logging for test
log.SetOutput(ioutil.Discard)
ts := testUDServer()
defer ts.Close()
_, err := Download(ts.URL, nil)
suite.Require().NoError(err)
log.SetOutput(os.Stderr)
}
func (suite *validateSuite) TestKubeadmMarshal() {
var kubeadm Kubeadm
err := yaml.Unmarshal([]byte(kubeadmConfig), &kubeadm)
suite.Require().NoError(err)
assert.Equal(suite.T(), "test", kubeadm.CertificateKey)
out, err := yaml.Marshal(&kubeadm)
suite.Require().NoError(err)
assert.Equal(suite.T(), kubeadmConfig, string(out))
}
func testUDServer() *httptest.Server {
var count int
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
count++
log.Printf("Request %d\n", count)
if count == 4 {
// nolint: errcheck
w.Write([]byte(testConfig))
return
}
w.WriteHeader(http.StatusInternalServerError)
}))
return ts
}
// nolint: lll
const testConfig = `version: ""
const testConfig = `version: "1"
security:
os:
ca:
@@ -58,7 +111,7 @@ services:
trustd:
username: 'test'
password: 'test'
endpoints: []
endpoints: [ "1.2.3.4" ]
certSANs: []
install:
wipe: true
@@ -77,16 +130,6 @@ install:
size: 1024000000
`
func TestDownloadRetry(t *testing.T) {
ts := testUDServer()
defer ts.Close()
_, err := Download(ts.URL, nil)
if err != nil {
t.Error("Failed to download userdata", err)
}
}
// nolint: lll
const kubeadmConfig = `configuration: |
apiVersion: kubeadm.k8s.io/v1beta1
@@ -174,34 +217,3 @@ const kubeadmConfig = `configuration: |
sourceVip: ""
certificateKey: test
`
func TestKubeadmMarshal(t *testing.T) {
var kubeadm Kubeadm
err := yaml.Unmarshal([]byte(kubeadmConfig), &kubeadm)
assert.NoError(t, err)
assert.Equal(t, "test", kubeadm.CertificateKey)
out, err := yaml.Marshal(&kubeadm)
assert.NoError(t, err)
assert.Equal(t, kubeadmConfig, string(out))
}
func testUDServer() *httptest.Server {
var count int
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
count++
log.Printf("Request %d\n", count)
if count == 4 {
// nolint: errcheck
w.Write([]byte(testConfig))
return
}
w.WriteHeader(http.StatusInternalServerError)
}))
return ts
}