tests
This commit is contained in:
@@ -0,0 +1,107 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/useragent"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"google.golang.org/grpc/metadata"
|
||||
)
|
||||
|
||||
func TestAppendHeadersToOutgoingContext_AppendsHeadersAndUserAgent(t *testing.T) {
|
||||
ctx := context.TODO()
|
||||
ua, err := useragent.New("10.0.0", "linux", "amd64")
|
||||
require.NoError(t, err)
|
||||
ctx = backend.WithUserAgent(ctx, ua)
|
||||
ctx = metadata.NewOutgoingContext(ctx, metadata.Pairs("Existing", "one"))
|
||||
|
||||
req := &backend.RunStreamRequest{
|
||||
Headers: map[string]string{
|
||||
"X-Test": "value",
|
||||
},
|
||||
}
|
||||
|
||||
out := AppendHeadersToOutgoingContext(ctx, req)
|
||||
outgoingMD, ok := metadata.FromOutgoingContext(out)
|
||||
require.True(t, ok)
|
||||
assert.Equal(t, []string{"value"}, outgoingMD.Get("x-test"))
|
||||
assert.Equal(t, []string{ua.String()}, outgoingMD.Get("user-agent"))
|
||||
assert.Equal(t, []string{"one"}, outgoingMD.Get("existing"))
|
||||
}
|
||||
|
||||
func TestSetHeadersFromIncomingContext_MergesTeamAndClientHeaders(t *testing.T) {
|
||||
jsonData := []byte(`{
|
||||
"teamHttpHeaders": {
|
||||
"headers": {
|
||||
"101": [
|
||||
{"header": "X-Team", "value": "team-value"},
|
||||
{"header": "X-Shared", "value": "team-wins"}
|
||||
]
|
||||
}
|
||||
},
|
||||
"httpHeaderName1": "X-Client",
|
||||
"httpHeaderName2": "X-Shared"
|
||||
}`)
|
||||
|
||||
pluginCtx := backend.PluginContext{
|
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{
|
||||
JSONData: jsonData,
|
||||
DecryptedSecureJSONData: map[string]string{
|
||||
"httpHeaderValue1": "client-value",
|
||||
"httpHeaderValue2": "client-overridden",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
ctx := backend.WithPluginContext(context.Background(), pluginCtx)
|
||||
headers, err := SetHeadersFromIncomingContext(ctx)
|
||||
require.NoError(t, err)
|
||||
|
||||
expected := map[string]string{
|
||||
"X-Client": "client-value",
|
||||
"X-Team": "team-value",
|
||||
"X-Shared": "team-wins",
|
||||
}
|
||||
assert.Equal(t, expected, headers)
|
||||
}
|
||||
|
||||
func TestGetTeamHTTPHeaders_NoTeamHeaders(t *testing.T) {
|
||||
pluginCtx := backend.PluginContext{
|
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{
|
||||
JSONData: []byte(`{"httpHeaderName1": "X-Client"}`),
|
||||
},
|
||||
}
|
||||
|
||||
headers, err := getTeamHTTPHeaders(pluginCtx)
|
||||
require.NoError(t, err)
|
||||
assert.Empty(t, headers)
|
||||
}
|
||||
|
||||
func TestGetClientOptionsHeaders_ParsesHeaders(t *testing.T) {
|
||||
pluginCtx := backend.PluginContext{
|
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{
|
||||
JSONData: []byte(`{"httpHeaderName1": "X-Client"}`),
|
||||
DecryptedSecureJSONData: map[string]string{
|
||||
"httpHeaderValue1": "client-value",
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
headers, err := getClientOptionsHeaders(context.Background(), pluginCtx)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, map[string]string{"X-Client": "client-value"}, headers)
|
||||
}
|
||||
|
||||
func TestGetClientOptionsHeaders_InvalidJSON(t *testing.T) {
|
||||
pluginCtx := backend.PluginContext{
|
||||
DataSourceInstanceSettings: &backend.DataSourceInstanceSettings{
|
||||
JSONData: []byte("{"),
|
||||
},
|
||||
}
|
||||
|
||||
_, err := getClientOptionsHeaders(context.Background(), pluginCtx)
|
||||
require.Error(t, err)
|
||||
}
|
||||
Reference in New Issue
Block a user