Newer
Older
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"orus.io/orus-io/beaver/runner"
"orus.io/orus-io/beaver/testutils"
fixtures = "fixtures/f1"
shaFixtures = "fixtures/f2"
)
func TestConfig(t *testing.T) {
config, err := runner.NewConfig(filepath.Join(fixtures, "base"))
require.NoError(t, err)
// first config.spec.variables entry name should be VAULT_KV in our test file
assert.Equal(t, "VAULT_KV", config.Variables[0].Name)
assert.Equal(t, "orus.io", config.Variables[0].Value)
assert.Equal(t, "../vendor/helm/postgresql", config.Charts["postgres"].Path)
assert.Equal(t, "../vendor/ytt/odoo", config.Charts["odoo"].Path)
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
func TestHydrate(t *testing.T) {
rawVariables := []byte(`
#@data/values
---
foo: |
a multi
line string
bar:
simple: interface
with:
- some
- content
baz: |
only one line in multiline mode
boo: a simple joke line
`)
variables := make(map[string]interface{})
byteContent := bytes.NewReader(rawVariables)
decoder := yaml.NewDecoder(byteContent)
require.NoError(t, decoder.Decode(&variables))
input := `
#@data/values
---
foo: <[foo]>
bar: <[bar]>
baz: <[baz]>
boo: <[boo]>
`
buf := bytes.NewBufferString("")
require.NoError(t, runner.Hydrate([]byte(input), buf, variables))
assert.Equal(
t,
string(rawVariables),
buf.String(),
)
}
func TestYttBuildArgs(t *testing.T) {
tl := testutils.NewTestLogger(t)
require.NoError(t, err)
c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "")
tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
require.NoError(t, err)
defer func() {
assert.NoError(t, os.RemoveAll(tmpDir))
}()
require.NoError(t, c.Initialize(tmpDir))
args := c.BuildYttArgs(c.Spec.Ytt, []string{"/tmp/postgres.1234.yaml", "/tmp/odoo.5678.yaml"})
// []string{
// "-f", "/tmp/postgres.1234.yaml", "--file-mark=postgres.1234.yaml:type=yaml-plain",
// "-f", "/tmp/odoo.5678.yaml", "--file-mark=odoo.5678.yaml:type=yaml-plain",
// "-f", filepath.Join(fixtures, "base/ytt"),
// "-f", filepath.Join(fixtures, "base/ytt.yml"),
// "-f", filepath.Join(fixtures, "environments/ns1/ytt"),
// "-f", filepath.Join(fixtures, "environments/ns1/ytt.yaml"),
// },
14,
len(args),
func TestCreateConfig(t *testing.T) {
tl := testutils.NewTestLogger(t)
absConfigDir, err := filepath.Abs(fixtures)
require.NoError(t, err)
c := runner.NewCmdConfig(tl.Logger(), absConfigDir, testNS, false, "")
tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
require.NoError(t, err)
defer func() {
assert.NoError(t, os.RemoveAll(tmpDir))
}()
require.NoError(t, c.Initialize(tmpDir))
require.Equal(t, 1, len(c.Spec.Creates))
assert.True(t, filepath.IsAbs(c.Spec.Charts["postgres"].Path))
crKey := runner.CmdCreateKey{
Type: "configmap",
Name: "xbus-pipelines",
}
cr, ok := c.Spec.Creates[crKey]
assert.True(t, ok)
require.Equal(t, 1, len(cr.Args))
for k, create := range c.Spec.Creates {
args := k.BuildArgs(c.Namespace, create.Args)
assert.Equal(
t,
[]string{
"-n", c.Namespace,
"create",
"configmap", "xbus-pipelines",
"--dry-run=client", "-o", "yaml",
func TestSha(t *testing.T) {
shaValue := "33935340f50ff18c3837c8cf42a423f6be96df7886723a3994a6018b0cc97e01"
buildDir := filepath.Join(shaFixtures, "build", "example")
defer func() {
require.NoError(t, runner.CleanDir(buildDir))
}()
tl := testutils.NewTestLogger(t)
absConfigDir, err := filepath.Abs(shaFixtures)
require.NoError(t, err)
c := runner.NewCmdConfig(tl.Logger(), absConfigDir, "base", false, "")
tmpDir, err := os.MkdirTemp(os.TempDir(), "beaver-")
require.NoError(t, err)
defer func() {
assert.NoError(t, os.RemoveAll(tmpDir))
}()
require.NoError(t, c.Initialize(tmpDir))
r := runner.NewRunner(c)
require.NoError(t, r.Build(tmpDir))
configMap := filepath.Join(buildDir, "ConfigMap.v1.demo.yaml")
cm, err := parseFile(configMap)
require.NoError(t, err)
sha, err := getLabel(cm, "mysha")
require.NoError(t, err)
require.Equal(t, shaValue, sha)
deployment := filepath.Join(buildDir, "Deployment.apps_v1.nginx.yaml")
deploy, err := parseFile(deployment)
require.NoError(t, err)
sha, err = getLabel(deploy, "config.sha")
require.NoError(t, err)
func getLabel(resource map[string]interface{}, label string) (string, error) {
metadata, ok := resource["metadata"].(map[string]interface{})
return "", fmt.Errorf("fail to get label: metadata on %+v", resource["metadata"])
labels, ok := metadata["labels"].(map[string]interface{})
return "", fmt.Errorf("fail to get label: labels on %+v", metadata["labels"])
func parseFile(input string) (map[string]interface{}, error) {
resource := make(map[string]interface{})
content, err := os.ReadFile(input)
if err != nil {
return nil, fmt.Errorf("fail to parse: %w", err)
}
byteContent := bytes.NewReader(content)
decoder := yaml.NewDecoder(byteContent)
err = decoder.Decode(&resource)
if err != nil {
return nil, fmt.Errorf("fail to parse: %w", err)
}