github.com/kubernetes-incubator/kube-aws@v0.16.4/pkg/api/custom_file_test.go (about)

     1  package api
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/go-yaml/yaml"
     7  	"github.com/stretchr/testify/assert"
     8  )
     9  
    10  type TestContextFruit struct {
    11  	ChoiceOfFruit string
    12  }
    13  
    14  type TestContextAnimal struct {
    15  	IsADog      bool
    16  	Name        string
    17  	YearOfBirth string
    18  }
    19  
    20  var (
    21  	// simple plain file case
    22  	customFileContent = `path: /tmp/testfile
    23  permissions: 0777
    24  content: hello world
    25  `
    26  
    27  	// customfile contains a template
    28  	customFileTemplate = `path: /tmp/testfile
    29  permissions: 0777
    30  template: I love {{ .ChoiceOfFruit }}
    31  `
    32  )
    33  
    34  func TestCustomFileRendersContent(t *testing.T) {
    35  	cfile := CustomFile{}
    36  	err := yaml.Unmarshal([]byte(customFileContent), &cfile)
    37  	assert.NoError(t, err)
    38  	output, err := cfile.RenderContent(TestContextFruit{})
    39  	assert.NoError(t, err)
    40  	assert.Equal(t, "hello world", output)
    41  }
    42  
    43  func TestCustomFileRenderWithEncoding(t *testing.T) {
    44  	helloWorldEncoded := `H4sIAAAAAAAA/8pIzcnJVyjPL8pJAQQAAP//hRFKDQsAAAA=`
    45  
    46  	cfile := CustomFile{}
    47  	err := yaml.Unmarshal([]byte(customFileContent), &cfile)
    48  	assert.NoError(t, err)
    49  	output, err := cfile.RenderGzippedBase64Content(TestContextFruit{})
    50  	assert.NoError(t, err)
    51  	assert.Equal(t, helloWorldEncoded, output)
    52  }
    53  
    54  func TestCustomFileRenderTemplate(t *testing.T) {
    55  	cfile := CustomFile{}
    56  	err := yaml.Unmarshal([]byte(customFileTemplate), &cfile)
    57  	assert.NoError(t, err)
    58  	output, err := cfile.RenderContent(TestContextFruit{ChoiceOfFruit: "apples"})
    59  	assert.NoError(t, err)
    60  	assert.Equal(t, "I love apples", output)
    61  }
    62  
    63  func TestCustomFileRenderTemplateWithEncoding(t *testing.T) {
    64  	iLoveApplesEncoded := `H4sIAAAAAAAA//JUyMkvS1VILCjISS0GBAAA//+rYX5CDQAAAA==`
    65  
    66  	cfile := CustomFile{}
    67  	err := yaml.Unmarshal([]byte(customFileTemplate), &cfile)
    68  	assert.NoError(t, err)
    69  	output, err := cfile.RenderGzippedBase64Content(TestContextFruit{ChoiceOfFruit: "apples"})
    70  	assert.NoError(t, err)
    71  	assert.Equal(t, iLoveApplesEncoded, output)
    72  }
    73  
    74  func TestCustomBadTemplate(t *testing.T) {
    75  	badTemplate := `path: /tmp/testfile
    76  permissions: 0777
    77  template: I love {{ if .ChoiceOfFruit }}`
    78  
    79  	cfile := CustomFile{}
    80  	err := yaml.Unmarshal([]byte(badTemplate), &cfile)
    81  	assert.NoError(t, err)
    82  	output, err := cfile.RenderContent(TestContextAnimal{})
    83  	assert.Error(t, err)
    84  	assert.Equal(t, "", output)
    85  }
    86  
    87  func TestDualCustomFileContent(t *testing.T) {
    88  	// customFile contains both content AND template
    89  	cf := `path: /tmp/testfile
    90  permissions: 0777
    91  content: I love bananas
    92  template: I love {{ .ChoiceOfFruit }}
    93  `
    94  
    95  	cfile := CustomFile{}
    96  	err := yaml.Unmarshal([]byte(cf), &cfile)
    97  	assert.NoError(t, err)
    98  	output, err := cfile.RenderContent(TestContextFruit{ChoiceOfFruit: "apples"})
    99  	assert.NoError(t, err)
   100  	assert.Equal(t, "I love apples", output)
   101  }