Skip to content

Commit d390b07

Browse files
Address file name too long error when passing certs as literal values (#1719)
* handle long literal values for certs * Use testify for shorter tests --------- Co-authored-by: Julien Duchesne <[email protected]>
1 parent f133a35 commit d390b07

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

Diff for: pkg/provider/configure_clients.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import (
99
"net/url"
1010
"os"
1111
"strings"
12+
"syscall"
1213
"time"
1314

1415
onCallAPI "github.com/grafana/amixr-api-go-client"
@@ -190,7 +191,7 @@ func createTempFileIfLiteral(value string) (path string, tempFile bool, err erro
190191
return "", false, nil
191192
}
192193

193-
if _, err := os.Stat(value); errors.Is(err, os.ErrNotExist) {
194+
if _, err := os.Stat(value); errors.Is(err, os.ErrNotExist) || errors.Is(err, syscall.ENAMETOOLONG) {
194195
// value is not a file path, assume it's a literal
195196
f, err := os.CreateTemp("", "grafana-provider-tls")
196197
if err != nil {

Diff for: pkg/provider/configure_clients_test.go

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
package provider
2+
3+
import (
4+
"os"
5+
"testing"
6+
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestCreateTempFileIfLiteral(t *testing.T) {
11+
t.Run("Test with empty string value returns empty and does not create temp file", func(t *testing.T) {
12+
path, tempFile, err := createTempFileIfLiteral("")
13+
require.NoError(t, err)
14+
require.False(t, tempFile, "Expected temp file to not be created")
15+
require.Empty(t, path)
16+
})
17+
t.Run("Test file path returns given path and does not create a temp file", func(t *testing.T) {
18+
// Create a temporary file to simulate an existing file
19+
tmp, err := os.CreateTemp(t.TempDir(), "existing-file")
20+
require.NoError(t, err)
21+
22+
path, tempFile, err := createTempFileIfLiteral(tmp.Name())
23+
require.NoError(t, err)
24+
require.False(t, tempFile, "Expected temp file to not be created")
25+
require.Equal(t, tmp.Name(), path)
26+
})
27+
28+
t.Run("Test with short literal creates temp file and path", func(t *testing.T) {
29+
caCert := "certTest"
30+
31+
path, tempFile, err := createTempFileIfLiteral(caCert)
32+
require.NoError(t, err)
33+
require.True(t, tempFile, "Expected temp file to be created")
34+
require.NotEmpty(t, path)
35+
36+
// Validate the file was created and has the correct content
37+
content, err := os.ReadFile(path)
38+
require.NoError(t, err)
39+
require.Equal(t, caCert, string(content))
40+
41+
// Clean up the temporary file
42+
require.NoError(t, os.Remove(path))
43+
})
44+
45+
t.Run("Test with a certificate literal creates temp file and path", func(t *testing.T) {
46+
caCert := ` -----BEGIN CERTIFICATE-----
47+
MIIDXTCCAkWgAwIBAgIJAMW9UJtz1MoNMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
48+
BAYTAkFVMRMwEQYDVQQIDApxdWVlbnNsYW5kMRAwDgYDVQQHDAdicmlzYmFuZTEN
49+
MAsGA1UECgwEVGVzdDAeFw0xODA2MTAwNzU1NDJaFw0xOTA2MTAwNzU1NDJaMEUx
50+
CzAJBgNVBAYTAkFVMRMwEQYDVQQIDApxdWVlbnNsYW5kMRAwDgYDVQQHDAdicmlz
51+
YmFuZTENMAsGA1UECgwEVGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
52+
ggEBAK1lpt+lPZJbG7yMYYWzjk8FwGbM3vlUJlC2aQHJ18T2aTtsOaZC1deKtwGR
53+
qBZMyel3hG0XayZmFQO2DAnOScgn4j+jPEFLWswg+U4MgH80+PA4wHzm+E0v68qD
54+
S+cA9If1D2I0gtT6jKPm3WYwZ/r0GUn8/JjgiIhCZGfXArH39V2D2KNhJ3W0b7T6
55+
isfbsHvSKWs/49q8w5J/yN8GOh/n/rThBfhM3FQ2eDdVR1QfvvX5KT69aXhtJlD9
56+
Z5H8z9DnD8BZxBrzE5hEO74KK13CvAFeKbVp7KvXf6NOy4W31lUd6lmzZ+lR+IxO
57+
NHElgJoaJ2F2y4XcFXY1cQFhKjkCAwEAAaNQME4wHQYDVR0OBBYEFLPkkSMxs/PR
58+
1E7VwDhRu5DTHwrNMB8GA1UdIwQYMBaAFLPkkSMxs/PR1E7VwDhRu5DTHwrNMAwG
59+
A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAK1lpt+lPZJbG7yMYYWzjk8F
60+
wGbM3vlUJlC2aQHJ18T2aTtsOaZC1deKtwGRqBZMyel3hG0XayZmFQO2DAnOScgn
61+
4j+jPEFLWswg+U4MgH80+PA4wHzm+E0v68qDS+cA9If1D2I0gtT6jKPm3WYwZ/r0
62+
GUn8/JjgiIhCZGfXArH39V2D2KNhJ3W0b7T6isfbsHvSKWs/49q8w5J/yN8GOh/n
63+
/rThBfhM3FQ2eDdVR1QfvvX5KT69aXhtJlD9Z5H8z9DnD8BZxBrzE5hEO74KK13C
64+
vAFeKbVp7KvXf6NOy4W31lUd6lmzZ+lR+IxONHElgJoaJ2F2y4XcFXY1cQFhKjkC
65+
AwEAAaNQME4wHQYDVR0OBBYEFLPkkSMxs/PR1E7VwDhRu5DTHwrNMB8GA1UdIwQY
66+
MBaAFLPkkSMxs/PR1E7VwDhRu5DTHwrNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
67+
AQELBQADggEBAK1lpt+lPZJbG7yMYYWzjk8FwGbM3vlUJlC2aQHJ18T2aTtsOaZC
68+
1deKtwGRqBZMyel3hG0XayZmFQO2DAnOScgn4j+jPEFLWswg+U4MgH80+PA4wHzm
69+
+E0v68qDS+cA9If1D2I0gtT6jKPm3WYwZ/r0GUn8/JjgiIhCZGfXArH39V2D2KNh
70+
J3W0b7T6isfbsHvSKWs/49q8w5J/yN8GOh/n/rThBfhM3FQ2eDdVR1QfvvX5KT69
71+
aXhtJlD9Z5H8z9DnD8BZxBrzE5hEO74KK13CvAFeKbVp7KvXf6NOy4W31lUd6lmz
72+
Z+lR+IxONHElgJoaJ2F2y4XcFXY1cQFhKjkCAwEAAaNQME4wHQYDVR0OBBYEFLPk
73+
kSMxs/PR1E7VwDhRu5DTHwrNMB8GA1UdIwQYMBaAFLPkkSMxs/PR1E7VwDhRu5DT
74+
HwrNMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAK1lpt+lPZJbG7yM
75+
YYWzjk8FwGbM3vlUJl=
76+
-----END CERTIFICATE-----`
77+
78+
path, tempFile, err := createTempFileIfLiteral(caCert)
79+
require.NoError(t, err)
80+
require.True(t, tempFile, "Expected temp file to be created")
81+
require.NotEmpty(t, path)
82+
83+
// Check if the file exists and has the correct content
84+
content, err := os.ReadFile(path)
85+
require.NoError(t, err)
86+
require.Equal(t, caCert, string(content))
87+
88+
// Clean up the temporary file
89+
require.NoError(t, os.Remove(path))
90+
})
91+
}

0 commit comments

Comments
 (0)