|
| 1 | +package configtypes |
| 2 | + |
| 3 | +import ( |
| 4 | + "encoding/base64" |
| 5 | + "os" |
| 6 | + "reflect" |
| 7 | + "testing" |
| 8 | + |
| 9 | + "github.com/stretchr/testify/assert" |
| 10 | + |
| 11 | + "github.com/stretchr/testify/require" |
| 12 | +) |
| 13 | + |
| 14 | +func TestPEMData_Load(t *testing.T) { |
| 15 | + mockStatFile := func(name string) (os.FileInfo, error) { |
| 16 | + if name != "test-file" { |
| 17 | + return nil, os.ErrNotExist |
| 18 | + } |
| 19 | + return nil, nil |
| 20 | + } |
| 21 | + mockReadFile := func(name string) ([]byte, error) { |
| 22 | + if name != "test-file" { |
| 23 | + return nil, os.ErrNotExist |
| 24 | + } |
| 25 | + return []byte(testPEMCert), nil |
| 26 | + } |
| 27 | + |
| 28 | + tests := []struct { |
| 29 | + name string |
| 30 | + data PEMData |
| 31 | + expected string |
| 32 | + }{ |
| 33 | + {"File Path", PEMData("test-file"), testPEMCert}, |
| 34 | + {"Base64", PEMData(base64.StdEncoding.EncodeToString([]byte(testPEMCert))), testPEMCert}, |
| 35 | + {"Raw PEM", PEMData(testPEMCert), testPEMCert}, |
| 36 | + } |
| 37 | + |
| 38 | + for _, tt := range tests { |
| 39 | + t.Run(tt.name, func(t *testing.T) { |
| 40 | + data, _, err := tt.data.Load(mockStatFile, mockReadFile) |
| 41 | + require.NoError(t, err) |
| 42 | + require.Equal(t, tt.expected, string(data)) |
| 43 | + }) |
| 44 | + } |
| 45 | +} |
| 46 | + |
| 47 | +func TestStringToPEMDataHookFunc(t *testing.T) { |
| 48 | + hook := StringToPEMDataHookFunc().(func( |
| 49 | + f reflect.Type, |
| 50 | + t reflect.Type, |
| 51 | + data interface{}, |
| 52 | + ) (interface{}, error)) |
| 53 | + result, err := hook(reflect.TypeOf(""), reflect.TypeOf(PEMData("")), "test-data") |
| 54 | + require.NoError(t, err) |
| 55 | + require.Equal(t, PEMData("test-data"), result) |
| 56 | +} |
| 57 | + |
| 58 | +const testPEMCert = ` |
| 59 | +-- GlobalSign Root R2, valid until Dec 15, 2021 |
| 60 | +-----BEGIN CERTIFICATE----- |
| 61 | +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G |
| 62 | +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp |
| 63 | +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 |
| 64 | +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG |
| 65 | +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI |
| 66 | +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL |
| 67 | +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 |
| 68 | +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq |
| 69 | +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd |
| 70 | +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa |
| 71 | +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB |
| 72 | +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH |
| 73 | +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n |
| 74 | +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG |
| 75 | +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs |
| 76 | +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO |
| 77 | +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS |
| 78 | +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd |
| 79 | +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 |
| 80 | +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== |
| 81 | +-----END CERTIFICATE-----` |
| 82 | + |
| 83 | +func Test_isValidPEM(t *testing.T) { |
| 84 | + tests := []struct { |
| 85 | + name string |
| 86 | + data string |
| 87 | + expected bool |
| 88 | + }{ |
| 89 | + {"Valid PEM", testPEMCert, true}, |
| 90 | + {"Invalid PEM", "/etc/passwd", false}, |
| 91 | + } |
| 92 | + for _, tt := range tests { |
| 93 | + t.Run(tt.name, func(t *testing.T) { |
| 94 | + result := isValidPEM(tt.data) |
| 95 | + require.Equal(t, tt.expected, result) |
| 96 | + }) |
| 97 | + } |
| 98 | +} |
| 99 | + |
| 100 | +const invalidPEM = "invalid PEM content" |
| 101 | + |
| 102 | +func TestPEMData_Load_Invalid(t *testing.T) { |
| 103 | + pem := PEMData(invalidPEM) |
| 104 | + |
| 105 | + _, _, err := pem.Load(mockStatFileSuccess, mockReadFileInvalid) |
| 106 | + require.Error(t, err) |
| 107 | + assert.Contains(t, err.Error(), "invalid PEM data") |
| 108 | +} |
0 commit comments