Add opsgenie static credentials check and test (#27655)

* Pass down form value name field to react selectable input

* Add opsgenie static validation check and test
This commit is contained in:
Lisa Kim 2023-06-09 11:35:45 -07:00 committed by GitHub
parent 3a008b176c
commit 0b2cef80bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 103 additions and 6 deletions

View file

@ -133,18 +133,18 @@ func (p *PluginV1) CheckAndSetDefaults() error {
}
case *PluginSpecV1_Opsgenie:
if settings.Opsgenie == nil {
return trace.BadParameter("settings must be set")
return trace.BadParameter("missing opsgenie settings")
}
if err := settings.Opsgenie.CheckAndSetDefaults(); err != nil {
return trace.Wrap(err)
}
bearer := p.Credentials.GetBearerToken()
if bearer == nil {
return trace.BadParameter("opsgenie plugin must be used with the bearer token credential type")
staticCreds := p.Credentials.GetStaticCredentialsRef()
if staticCreds == nil {
return trace.BadParameter("opsgenie plugin must be used with the static credentials ref type")
}
if bearer.Token == "" {
return trace.BadParameter("Token must be specified")
if len(staticCreds.Labels) == 0 {
return trace.BadParameter("labels must be specified")
}
case *PluginSpecV1_Jamf:
if settings.Jamf.JamfSpec.ApiEndpoint == "" {
@ -311,6 +311,8 @@ func (p *PluginV1) GetType() PluginType {
return PluginTypeOkta
case *PluginSpecV1_Jamf:
return PluginTypeJamf
case *PluginSpecV1_Opsgenie:
return PluginTypeOpsgenie
default:
return PluginTypeUnknown
}

View file

@ -109,6 +109,98 @@ func TestPluginOpenAIValidation(t *testing.T) {
}
}
func TestPluginOpsgenieValidation(t *testing.T) {
testCases := []struct {
name string
settings *PluginSpecV1_Opsgenie
creds *PluginCredentialsV1
assertErr require.ErrorAssertionFunc
}{
{
name: "no settings",
settings: &PluginSpecV1_Opsgenie{
Opsgenie: nil,
},
creds: nil,
assertErr: func(t require.TestingT, err error, args ...any) {
require.True(t, trace.IsBadParameter(err))
require.Contains(t, err.Error(), "missing opsgenie settings")
},
},
{
name: "no api endpint",
settings: &PluginSpecV1_Opsgenie{
Opsgenie: &PluginOpsgenieAccessSettings{},
},
creds: nil,
assertErr: func(t require.TestingT, err error, args ...any) {
require.True(t, trace.IsBadParameter(err))
require.Contains(t, err.Error(), "api endpoint url must be set")
},
},
{
name: "no static credentials",
settings: &PluginSpecV1_Opsgenie{
Opsgenie: &PluginOpsgenieAccessSettings{
ApiEndpoint: "https://test.opsgenie.com",
},
},
assertErr: func(t require.TestingT, err error, args ...any) {
require.True(t, trace.IsBadParameter(err))
require.Contains(t, err.Error(), "must be used with the static credentials ref type")
},
},
{
name: "static credentials labels not defined",
settings: &PluginSpecV1_Opsgenie{
Opsgenie: &PluginOpsgenieAccessSettings{
ApiEndpoint: "https://test.opsgenie.com",
},
},
creds: &PluginCredentialsV1{
Credentials: &PluginCredentialsV1_StaticCredentialsRef{
&PluginStaticCredentialsRef{
Labels: map[string]string{},
},
},
},
assertErr: func(t require.TestingT, err error, args ...any) {
require.True(t, trace.IsBadParameter(err))
require.Contains(t, err.Error(), "labels must be specified")
},
},
{
name: "valid credentials (static credentials)",
settings: &PluginSpecV1_Opsgenie{
Opsgenie: &PluginOpsgenieAccessSettings{
ApiEndpoint: "https://test.opsgenie.com",
},
},
creds: &PluginCredentialsV1{
Credentials: &PluginCredentialsV1_StaticCredentialsRef{
&PluginStaticCredentialsRef{
Labels: map[string]string{
"label1": "value1",
},
},
},
},
assertErr: func(t require.TestingT, err error, args ...any) {
require.NoError(t, err)
},
},
}
for _, tc := range testCases {
t.Run(tc.name, func(t *testing.T) {
plugin := NewPluginV1(Metadata{Name: "foobar"}, PluginSpecV1{
Settings: tc.settings,
}, tc.creds)
tc.assertErr(t, plugin.CheckAndSetDefaults())
})
}
}
func TestPluginOktaValidation(t *testing.T) {
testCases := []struct {
name string

View file

@ -27,6 +27,7 @@ export default function FieldSelect({
labelTip,
value,
options,
name,
onChange,
placeholder,
maxMenuHeight,
@ -54,6 +55,7 @@ export default function FieldSelect({
)}
<Select
inputId="select"
name={name}
menuPosition={menuPosition}
hasError={hasError}
isSimpleValue={isSimpleValue}

View file

@ -35,6 +35,7 @@ export type Props = {
options: Option<any, any>[];
width?: string | number;
menuPlacement?: string;
name?: string;
minMenuHeight?: number;
components?: any;
customProps?: Record<string, any>;