github.com/docker/app@v0.9.1-beta3.0.20210611140623-a48f773ab002/internal/validator/rules/externalsecrets_test.go (about)

     1  package rules
     2  
     3  import (
     4  	"testing"
     5  
     6  	"gotest.tools/assert"
     7  )
     8  
     9  func TestExternalSecrets(t *testing.T) {
    10  	s := NewExternalSecretsRule()
    11  
    12  	t.Run("should accept secrets", func(t *testing.T) {
    13  		// The secrets key is on the root path, that's why it doesn't
    14  		// have a parent
    15  		assert.Equal(t, s.Accept("", "secrets"), true)
    16  	})
    17  
    18  	t.Run("should return nil if all secrets are external", func(t *testing.T) {
    19  		input := map[string]interface{}{
    20  			"my_secret": map[string]interface{}{
    21  				"external": "true",
    22  			},
    23  		}
    24  
    25  		errs := s.Validate(input)
    26  		assert.Equal(t, len(errs), 0)
    27  	})
    28  
    29  	t.Run("should return error if no external secrets", func(t *testing.T) {
    30  		input := map[string]interface{}{
    31  			"my_secret": map[string]interface{}{
    32  				"file": "./my_secret.txt",
    33  			},
    34  		}
    35  
    36  		errs := s.Validate(input)
    37  		assert.Equal(t, len(errs), 1)
    38  		assert.ErrorContains(t, errs[0], `secret "my_secret" must be external`)
    39  	})
    40  
    41  	t.Run("should return all errors", func(t *testing.T) {
    42  		input := map[string]interface{}{
    43  			"my_secret": map[string]interface{}{
    44  				"file": "./my_secret.txt",
    45  			},
    46  			"my_other_secret": map[string]interface{}{
    47  				"file": "./my_secret.txt",
    48  			},
    49  		}
    50  
    51  		errs := s.Validate(input)
    52  		assert.Equal(t, len(errs), 2)
    53  	})
    54  
    55  }