* Provisioning: Add Connection resource * adding some more integration tests * updating openapi snapshot, linting * generating FE code, fixing issue in unit tests * addressing comments * addressing comments * adding more integration tests * fixing rebase issues * removing linting exception * addressing comments: improving validation and tests * adding Connection URL at mutation time, updating tests accordingly * linting
254 lines
6.9 KiB
Go
254 lines
6.9 KiB
Go
package connection_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
provisioning "github.com/grafana/grafana/apps/provisioning/pkg/apis/provisioning/v0alpha1"
|
|
"github.com/grafana/grafana/apps/provisioning/pkg/connection"
|
|
common "github.com/grafana/grafana/pkg/apimachinery/apis/common/v0alpha1"
|
|
"github.com/stretchr/testify/assert"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
)
|
|
|
|
func TestValidateConnection(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
connection *provisioning.Connection
|
|
wantErr bool
|
|
errMsg string
|
|
}{
|
|
{
|
|
name: "empty type returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "spec.type",
|
|
},
|
|
{
|
|
name: "invalid type returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: "invalid",
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "spec.type",
|
|
},
|
|
{
|
|
name: "github type without github config returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GithubConnectionType,
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "spec.github",
|
|
},
|
|
{
|
|
name: "github type without private key returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GithubConnectionType,
|
|
GitHub: &provisioning.GitHubConnectionConfig{
|
|
AppID: "123",
|
|
InstallationID: "456",
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "secure.privateKey",
|
|
},
|
|
{
|
|
name: "github type with client secret returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GithubConnectionType,
|
|
GitHub: &provisioning.GitHubConnectionConfig{
|
|
AppID: "123",
|
|
InstallationID: "456",
|
|
},
|
|
},
|
|
Secure: provisioning.ConnectionSecure{
|
|
PrivateKey: common.InlineSecureValue{
|
|
Name: "test-private-key",
|
|
},
|
|
ClientSecret: common.InlineSecureValue{
|
|
Name: "test-client-secret",
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "secure.clientSecret",
|
|
},
|
|
{
|
|
name: "github type with github config is valid",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GithubConnectionType,
|
|
GitHub: &provisioning.GitHubConnectionConfig{
|
|
AppID: "123",
|
|
InstallationID: "456",
|
|
},
|
|
},
|
|
Secure: provisioning.ConnectionSecure{
|
|
PrivateKey: common.InlineSecureValue{
|
|
Name: "test-private-key",
|
|
},
|
|
},
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "bitbucket type without bitbucket config returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.BitbucketConnectionType,
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "spec.bitbucket",
|
|
},
|
|
{
|
|
name: "bitbucket type without client secret returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.BitbucketConnectionType,
|
|
Bitbucket: &provisioning.BitbucketConnectionConfig{
|
|
ClientID: "client-123",
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "secure.clientSecret",
|
|
},
|
|
{
|
|
name: "bitbucket type with private key returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.BitbucketConnectionType,
|
|
Bitbucket: &provisioning.BitbucketConnectionConfig{
|
|
ClientID: "client-123",
|
|
},
|
|
},
|
|
Secure: provisioning.ConnectionSecure{
|
|
PrivateKey: common.InlineSecureValue{
|
|
Name: "test-private-key",
|
|
},
|
|
ClientSecret: common.InlineSecureValue{
|
|
Name: "test-client-secret",
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "secure.privateKey",
|
|
},
|
|
{
|
|
name: "bitbucket type with bitbucket config is valid",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.BitbucketConnectionType,
|
|
Bitbucket: &provisioning.BitbucketConnectionConfig{
|
|
ClientID: "client-123",
|
|
},
|
|
},
|
|
Secure: provisioning.ConnectionSecure{
|
|
ClientSecret: common.InlineSecureValue{
|
|
Name: "test-client-secret",
|
|
},
|
|
},
|
|
},
|
|
wantErr: false,
|
|
},
|
|
{
|
|
name: "gitlab type without gitlab config returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GitlabConnectionType,
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "spec.gitlab",
|
|
},
|
|
{
|
|
name: "gitlab type without client secret returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GitlabConnectionType,
|
|
Gitlab: &provisioning.GitlabConnectionConfig{
|
|
ClientID: "client-456",
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "secure.clientSecret",
|
|
},
|
|
{
|
|
name: "gitlab type with private key returns error",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GitlabConnectionType,
|
|
Gitlab: &provisioning.GitlabConnectionConfig{
|
|
ClientID: "client-456",
|
|
},
|
|
},
|
|
Secure: provisioning.ConnectionSecure{
|
|
PrivateKey: common.InlineSecureValue{
|
|
Name: "test-private-key",
|
|
},
|
|
ClientSecret: common.InlineSecureValue{
|
|
Name: "test-client-secret",
|
|
},
|
|
},
|
|
},
|
|
wantErr: true,
|
|
errMsg: "secure.privateKey",
|
|
},
|
|
{
|
|
name: "gitlab type with gitlab config is valid",
|
|
connection: &provisioning.Connection{
|
|
ObjectMeta: metav1.ObjectMeta{Name: "test-connection"},
|
|
Spec: provisioning.ConnectionSpec{
|
|
Type: provisioning.GitlabConnectionType,
|
|
Gitlab: &provisioning.GitlabConnectionConfig{
|
|
ClientID: "client-456",
|
|
},
|
|
},
|
|
Secure: provisioning.ConnectionSecure{
|
|
ClientSecret: common.InlineSecureValue{
|
|
Name: "test-client-secret",
|
|
},
|
|
},
|
|
},
|
|
wantErr: false,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
err := connection.ValidateConnection(tt.connection)
|
|
if tt.wantErr {
|
|
assert.Error(t, err)
|
|
if tt.errMsg != "" {
|
|
assert.Contains(t, err.Error(), tt.errMsg)
|
|
}
|
|
} else {
|
|
assert.NoError(t, err)
|
|
}
|
|
})
|
|
}
|
|
}
|