Datasources: provide generic function to extract custom headers (#66738)

This commit is contained in:
Jean-Philippe Quéméner
2023-04-19 17:04:30 +02:00
committed by GitHub
parent 772ddbc3c0
commit 42cdec369d
6 changed files with 97 additions and 3 deletions
@@ -707,6 +707,78 @@ func TestService_GetDecryptedValues(t *testing.T) {
})
}
func TestDataSource_CustomHeaders(t *testing.T) {
sqlStore := db.InitTestDB(t)
secretsService := secretsmng.SetupTestService(t, fakes.NewFakeSecretsStore())
secretsStore := secretskvs.NewSQLSecretsKVStore(sqlStore, secretsService, log.New("test.logger"))
quotaService := quotatest.New(false, nil)
dsService, err := ProvideService(sqlStore, secretsService, secretsStore, nil, featuremgmt.WithFeatures(), acmock.New(), acmock.NewMockedPermissionsService(), quotaService)
require.NoError(t, err)
dsService.cfg = setting.NewCfg()
testValue := "HeaderValue1"
encryptedValue, err := secretsService.Encrypt(context.Background(), []byte(testValue), secrets.WithoutScope())
require.NoError(t, err)
testCases := []struct {
name string
jsonData *simplejson.Json
secureJsonData map[string][]byte
expectedHeaders map[string]string
expectedErrorMsg string
}{
{
name: "valid custom headers",
jsonData: simplejson.NewFromAny(map[string]interface{}{
"httpHeaderName1": "X-Test-Header1",
}),
secureJsonData: map[string][]byte{
"httpHeaderValue1": encryptedValue,
},
expectedHeaders: map[string]string{
"X-Test-Header1": testValue,
},
},
{
name: "missing header value",
jsonData: simplejson.NewFromAny(map[string]interface{}{
"httpHeaderName1": "X-Test-Header1",
}),
secureJsonData: map[string][]byte{},
expectedHeaders: map[string]string{},
},
{
name: "non customer header value",
jsonData: simplejson.NewFromAny(map[string]interface{}{
"someotherheader": "X-Test-Header1",
}),
secureJsonData: map[string][]byte{},
expectedHeaders: map[string]string{},
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
ds := &datasources.DataSource{
JsonData: tc.jsonData,
SecureJsonData: tc.secureJsonData,
}
headers, err := dsService.CustomHeaders(context.Background(), ds)
if tc.expectedErrorMsg != "" {
require.Error(t, err)
assert.Contains(t, err.Error(), tc.expectedErrorMsg)
} else {
require.NoError(t, err)
assert.Equal(t, tc.expectedHeaders, headers)
}
})
}
}
const caCert string = `-----BEGIN CERTIFICATE-----
MIIDATCCAemgAwIBAgIJAMQ5hC3CPDTeMA0GCSqGSIb3DQEBCwUAMBcxFTATBgNV
BAMMDGNhLWs4cy1zdGhsbTAeFw0xNjEwMjcwODQyMjdaFw00NDAzMTQwODQyMjda