get.porter.sh/porter@v1.3.0/pkg/cnab/parameter_sources_test.go (about) 1 package cnab 2 3 import ( 4 "os" 5 "testing" 6 7 "github.com/cnabio/cnab-go/bundle" 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 func TestProcessedExtensions_GetParameterSourcesExtension(t *testing.T) { 13 t.Parallel() 14 15 t.Run("extension present", func(t *testing.T) { 16 t.Parallel() 17 18 var ps ParameterSources 19 ps.SetParameterFromOutput("tfstate", "tfstate") 20 processed := ProcessedExtensions{ 21 ParameterSourcesExtensionKey: ps, 22 } 23 24 ext, required, err := processed.GetParameterSources() 25 require.NoError(t, err, "GetParameterSources failed") 26 assert.True(t, required, "parameter-sources should be a required extension") 27 assert.Equal(t, ps, ext, "parameter-sources was not populated properly") 28 }) 29 30 t.Run("extension missing", func(t *testing.T) { 31 t.Parallel() 32 33 processed := ProcessedExtensions{} 34 35 ext, required, err := processed.GetParameterSources() 36 require.NoError(t, err, "GetParameterSources failed") 37 assert.False(t, required, "parameter-sources should NOT be a required extension") 38 assert.Empty(t, ext, "parameter-sources should default to empty when not required") 39 }) 40 41 t.Run("extension invalid", func(t *testing.T) { 42 t.Parallel() 43 44 processed := ProcessedExtensions{ 45 ParameterSourcesExtensionKey: map[string]string{"ponies": "are great"}, 46 } 47 48 ext, required, err := processed.GetParameterSources() 49 require.Error(t, err, "GetParameterSources should have failed") 50 assert.True(t, required, "parameter-sources should be a required extension") 51 assert.Empty(t, ext, "parameter-sources should default to empty when not required") 52 }) 53 } 54 55 func TestReadParameterSourcesProperties(t *testing.T) { 56 t.Parallel() 57 58 data, err := os.ReadFile("testdata/bundle.json") 59 require.NoError(t, err, "cannot read bundle file") 60 61 b, err := bundle.Unmarshal(data) 62 require.NoError(t, err, "could not unmarshal the bundle") 63 bun := NewBundle(*b) 64 assert.True(t, bun.HasParameterSources()) 65 66 ps, err := bun.ReadParameterSources() 67 require.NoError(t, err, "could not read parameter sources") 68 69 want := ParameterSources{} 70 want.SetParameterFromOutput("tfstate", "tfstate") 71 want.SetParameterFromDependencyOutput("mysql_connstr", "mysql", "connstr") 72 assert.Equal(t, want, ps) 73 } 74 75 func TestParameterSource_ListSourcesByPriority(t *testing.T) { 76 t.Parallel() 77 78 ps := ParameterSources{} 79 ps.SetParameterFromOutput("tfstate", "tfstate") 80 got := ps["tfstate"].ListSourcesByPriority() 81 want := []ParameterSourceDefinition{ 82 OutputParameterSource{OutputName: "tfstate"}, 83 } 84 assert.Equal(t, want, got) 85 } 86 87 func TestSupportsParameterSources(t *testing.T) { 88 t.Parallel() 89 90 t.Run("supported", func(t *testing.T) { 91 b := NewBundle(bundle.Bundle{ 92 RequiredExtensions: []string{ParameterSourcesExtensionKey}, 93 }) 94 95 assert.True(t, b.SupportsParameterSources()) 96 }) 97 t.Run("unsupported", func(t *testing.T) { 98 b := ExtendedBundle{} 99 100 assert.False(t, b.SupportsParameterSources()) 101 }) 102 } 103 104 func TestHasParameterSources(t *testing.T) { 105 t.Parallel() 106 107 t.Run("has parameter sources", func(t *testing.T) { 108 b := NewBundle(bundle.Bundle{ 109 RequiredExtensions: []string{ParameterSourcesExtensionKey}, 110 Custom: map[string]interface{}{ 111 ParameterSourcesExtensionKey: struct{}{}, 112 }, 113 }) 114 115 assert.True(t, b.HasParameterSources()) 116 }) 117 t.Run("no parameter sources", func(t *testing.T) { 118 b := NewBundle(bundle.Bundle{ 119 RequiredExtensions: []string{ParameterSourcesExtensionKey}, 120 }) 121 122 assert.False(t, b.HasParameterSources()) 123 }) 124 }