795a974665
This merge will not yet include moving over to buildGo.nix, as support for testing and such is not present in that library yet.
205 lines
4.4 KiB
Go
205 lines
4.4 KiB
Go
// Copyright (C) 2016-2019 Vincent Ambo <mail@tazj.in>
|
|
//
|
|
// This file is part of Kontemplate.
|
|
//
|
|
// Kontemplate is free software: you can redistribute it and/or modify
|
|
// it under the terms of the GNU General Public License as published by
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
package templater
|
|
|
|
import (
|
|
"github.com/tazjin/kontemplate/context"
|
|
"reflect"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestApplyNoLimits(t *testing.T) {
|
|
resources := []context.ResourceSet{
|
|
{
|
|
Name: "testResourceSet1",
|
|
},
|
|
{
|
|
Name: "testResourceSet2",
|
|
},
|
|
}
|
|
|
|
result := applyLimits(&resources, &[]string{}, &[]string{})
|
|
|
|
if !reflect.DeepEqual(resources, *result) {
|
|
t.Error("Resource set slice changed, but shouldn't have.")
|
|
t.Errorf("Expected: %v\nResult: %v\n", resources, *result)
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestApplyIncludeLimits(t *testing.T) {
|
|
resources := []context.ResourceSet{
|
|
{
|
|
Name: "testResourceSet1",
|
|
},
|
|
{
|
|
Name: "testResourceSet2",
|
|
},
|
|
{
|
|
Name: "testResourceSet3",
|
|
Parent: "included",
|
|
},
|
|
}
|
|
|
|
includes := []string{"testResourceSet1", "included"}
|
|
|
|
result := applyLimits(&resources, &includes, &[]string{})
|
|
|
|
expected := []context.ResourceSet{
|
|
{
|
|
Name: "testResourceSet1",
|
|
},
|
|
{
|
|
Name: "testResourceSet3",
|
|
Parent: "included",
|
|
},
|
|
}
|
|
|
|
if !reflect.DeepEqual(expected, *result) {
|
|
t.Error("Result does not contain expected resource sets.")
|
|
t.Errorf("Expected: %v\nResult: %v\n", expected, *result)
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestApplyExcludeLimits(t *testing.T) {
|
|
resources := []context.ResourceSet{
|
|
{
|
|
Name: "testResourceSet1",
|
|
},
|
|
{
|
|
Name: "testResourceSet2",
|
|
},
|
|
{
|
|
Name: "testResourceSet3",
|
|
Parent: "included",
|
|
},
|
|
}
|
|
|
|
exclude := []string{"testResourceSet2"}
|
|
|
|
result := applyLimits(&resources, &[]string{}, &exclude)
|
|
|
|
expected := []context.ResourceSet{
|
|
{
|
|
Name: "testResourceSet1",
|
|
},
|
|
{
|
|
Name: "testResourceSet3",
|
|
Parent: "included",
|
|
},
|
|
}
|
|
|
|
if !reflect.DeepEqual(expected, *result) {
|
|
t.Error("Result does not contain expected resource sets.")
|
|
t.Errorf("Expected: %v\nResult: %v\n", expected, *result)
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestApplyLimitsExcludeIncludePrecedence(t *testing.T) {
|
|
resources := []context.ResourceSet{
|
|
{
|
|
Name: "collection/nested1",
|
|
Parent: "collection",
|
|
},
|
|
{
|
|
Name: "collection/nested2",
|
|
Parent: "collection",
|
|
},
|
|
{
|
|
Name: "collection/nested3",
|
|
Parent: "collection",
|
|
},
|
|
{
|
|
Name: "something-else",
|
|
},
|
|
}
|
|
|
|
include := []string{"collection"}
|
|
exclude := []string{"collection/nested2"}
|
|
|
|
result := applyLimits(&resources, &include, &exclude)
|
|
|
|
expected := []context.ResourceSet{
|
|
{
|
|
Name: "collection/nested1",
|
|
Parent: "collection",
|
|
},
|
|
{
|
|
Name: "collection/nested3",
|
|
Parent: "collection",
|
|
},
|
|
}
|
|
|
|
if !reflect.DeepEqual(expected, *result) {
|
|
t.Error("Result does not contain expected resource sets.")
|
|
t.Errorf("Expected: %v\nResult: %v\n", expected, *result)
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestFailOnMissingKeys(t *testing.T) {
|
|
ctx := context.Context{}
|
|
resourceSet := context.ResourceSet{}
|
|
|
|
_, err := templateFile(&ctx, &resourceSet, "testdata/test-template.txt")
|
|
|
|
if err == nil {
|
|
t.Errorf("Template with missing keys should have failed.\n")
|
|
t.Fail()
|
|
}
|
|
|
|
if !strings.Contains(err.Error(), "map has no entry for key \"testName\"") {
|
|
t.Errorf("Templating failed with unexpected error: %v\n", err)
|
|
}
|
|
}
|
|
|
|
func TestDefaultTemplateFunction(t *testing.T) {
|
|
ctx := context.Context{}
|
|
resourceSet := context.ResourceSet{}
|
|
|
|
res, err := templateFile(&ctx, &resourceSet, "testdata/test-default.txt")
|
|
|
|
if err != nil {
|
|
t.Errorf("Templating with default values should have succeeded.\n")
|
|
t.Fail()
|
|
}
|
|
|
|
if res.Rendered != "defaultValue\n" {
|
|
t.Error("Result does not contain expected rendered default value.")
|
|
t.Fail()
|
|
}
|
|
}
|
|
|
|
func TestInsertTemplateFunction(t *testing.T) {
|
|
ctx := context.Context{}
|
|
resourceSet := context.ResourceSet{
|
|
Path: "testdata",
|
|
Values: map[string]interface{}{
|
|
"testName": "TestInsertTemplateFunction",
|
|
},
|
|
}
|
|
|
|
res, err := templateFile(&ctx, &resourceSet, "testdata/test-insertTemplate.txt")
|
|
|
|
if err != nil {
|
|
t.Error(err)
|
|
t.Errorf("Templating with an insertTemplate call should have succeeded.\n")
|
|
t.Fail()
|
|
}
|
|
|
|
if res.Rendered != "Inserting \"Template for test TestInsertTemplateFunction\".\n" {
|
|
t.Error("Result does not contain expected rendered template value.")
|
|
t.Error(res.Rendered)
|
|
t.Fail()
|
|
}
|
|
}
|