mirror of https://github.com/linkerd/linkerd2.git
141 lines
4.2 KiB
Go
141 lines
4.2 KiB
Go
package cmd
|
|
|
|
import (
|
|
"bytes"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
cnicharts "github.com/linkerd/linkerd2/pkg/charts/cni"
|
|
"github.com/linkerd/linkerd2/testutil"
|
|
"helm.sh/helm/v3/pkg/chart"
|
|
"helm.sh/helm/v3/pkg/chartutil"
|
|
"helm.sh/helm/v3/pkg/engine"
|
|
"sigs.k8s.io/yaml"
|
|
)
|
|
|
|
func TestRenderCniHelm(t *testing.T) {
|
|
// read the cni plugin chart and its defaults from the local folder.
|
|
// override most defaults with pinned values.
|
|
// use the Helm lib to render the templates.
|
|
// the golden file is generated using the following `helm template` command:
|
|
// bin/helm template --set namespace="linkerd-test" --set controllerNamespaceLabel="linkerd.io/control-plane-ns-test" --set cniResourceAnnotation="linkerd.io/cni-resource-test" --set inboundProxyPort=1234 --set outboundProxyPort=5678 --set createdByAnnotation="linkerd.io/created-by-test" --set cniPluginImage="ghcr.io/linkerd/cni-plugin-test" --set cniPluginVersion="test-version" --set logLevel="debug" --set proxyUID=1111 --set destCNINetDir="/etc/cni/net.d-test" --set destCNIBinDir="/opt/cni/bin-test" --set useWaitFlag=true --set cliVersion=test-version charts/linkerd2-cni
|
|
|
|
t.Run("Cni Install with defaults", func(t *testing.T) {
|
|
chartCni := chartCniPlugin(t)
|
|
testRenderCniHelm(t, chartCni, &chartutil.Values{}, "install_cni_helm_default_output.golden")
|
|
})
|
|
|
|
t.Run("Cni Install with overridden values", func(t *testing.T) {
|
|
chartCni := chartCniPlugin(t)
|
|
overrideJSON :=
|
|
`{
|
|
"namespace": "linkerd-test",
|
|
"cniResourceLabel": "linkerd.io/cni-resource-test",
|
|
"inboundProxyPort": 1234,
|
|
"outboundProxyPort": 5678,
|
|
"createdByAnnotation": "linkerd.io/created-by-test",
|
|
"cniPluginImage": "ghcr.io/linkerd/cni-plugin-test",
|
|
"cniPluginVersion": "test-version",
|
|
"logLevel": "debug",
|
|
"proxyUID": 1111,
|
|
"destCNINetDir": "/etc/cni/net.d-test",
|
|
"destCNIBinDir": "/opt/cni/bin-test",
|
|
"useWaitFlag": true,
|
|
"cliVersion": "test-version",
|
|
"priorityClassName": "system-node-critical"
|
|
}`
|
|
|
|
var overrideConfig chartutil.Values
|
|
err := yaml.Unmarshal([]byte(overrideJSON), &overrideConfig)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error", err)
|
|
}
|
|
testRenderCniHelm(t, chartCni, &overrideConfig, "install_cni_helm_override_output.golden")
|
|
})
|
|
|
|
}
|
|
|
|
func testRenderCniHelm(t *testing.T, chart *chart.Chart, overrideConfig *chartutil.Values, goldenFileName string) {
|
|
var (
|
|
chartName = "linkerd2-cni"
|
|
namespace = "linkerd-test"
|
|
)
|
|
|
|
releaseOptions := chartutil.ReleaseOptions{
|
|
Name: chartName,
|
|
Namespace: namespace,
|
|
IsUpgrade: false,
|
|
IsInstall: true,
|
|
}
|
|
|
|
valuesToRender, err := chartutil.ToRenderValues(chart, *overrideConfig, releaseOptions, nil)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error", err)
|
|
}
|
|
|
|
rendered, err := engine.Render(chart, valuesToRender)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error", err)
|
|
}
|
|
|
|
var buf bytes.Buffer
|
|
for _, template := range chart.Templates {
|
|
source := chartName + "/" + template.Name
|
|
v, exists := rendered[source]
|
|
if !exists {
|
|
// skip partial templates
|
|
continue
|
|
}
|
|
buf.WriteString("---\n# Source: " + source + "\n")
|
|
buf.WriteString(v)
|
|
}
|
|
|
|
testDataDiffer.DiffTestdata(t, goldenFileName, buf.String())
|
|
}
|
|
|
|
func chartCniPlugin(t *testing.T) *chart.Chart {
|
|
rawValues, err := readCniTestValues(t)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error", err)
|
|
}
|
|
|
|
var values chartutil.Values
|
|
err = yaml.Unmarshal(rawValues, &values)
|
|
if err != nil {
|
|
t.Fatal("Unexpected error", err)
|
|
}
|
|
chartPartials := chartPartials(t, []string{"templates/_helpers.tpl"})
|
|
|
|
cniChart := &chart.Chart{
|
|
Metadata: &chart.Metadata{
|
|
Name: helmCNIDefaultChartName,
|
|
Sources: []string{
|
|
filepath.Join("..", "..", "..", "charts", "linkerd2-cni"),
|
|
},
|
|
},
|
|
Values: values,
|
|
}
|
|
|
|
cniChart.AddDependency(chartPartials)
|
|
|
|
cniChart.Templates = append(cniChart.Templates, &chart.File{
|
|
Name: "templates/cni-plugin.yaml",
|
|
})
|
|
|
|
for _, template := range cniChart.Templates {
|
|
filepath := filepath.Join(cniChart.Metadata.Sources[0], template.Name)
|
|
template.Data = []byte(testutil.ReadTestdata(t, filepath))
|
|
}
|
|
|
|
return cniChart
|
|
}
|
|
|
|
func readCniTestValues(t *testing.T) ([]byte, error) {
|
|
values, err := cnicharts.NewValues()
|
|
if err != nil {
|
|
t.Fatal("Unexpected error", err)
|
|
}
|
|
|
|
return yaml.Marshal(values)
|
|
}
|