Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,16 @@ func (pac *OpenShiftPipelinesAsCode) Validate(ctx context.Context) *apis.FieldEr
func (ps *PACSettings) validate(logger *zap.SugaredLogger, path string) *apis.FieldError {
var errs *apis.FieldError

// Settings may be nil when PAC is disabled (SetDefaults nils it out), but
// SyncConfig writes into it unconditionally. Use a local map so the CR
// being validated is not mutated.
settings := ps.Settings
if settings == nil {
settings = map[string]string{}
}

defaultPacSettings := pacSettings.Settings{}
if err := pacSettings.SyncConfig(logger, &defaultPacSettings, ps.Settings, pacSettings.DefaultValidators(), http.DefaultClient); err != nil {
if err := pacSettings.SyncConfig(logger, &defaultPacSettings, settings, pacSettings.DefaultValidators(), http.DefaultClient); err != nil {
errs = errs.Also(apis.ErrInvalidValue(err, fmt.Sprintf("%s.settings", path)))
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,3 +194,27 @@ func TestValidateAddtionalPACControllerInvalidSetting(t *testing.T) {
err := opacCR.Validate(context.TODO())
assert.Equal(t, "invalid value: invalid value: invalid value for URL, error: parse \"test/path\": invalid URI for request: validation failed for field custom-console-url: spec.additionalPACControllers.settings", err.Error())
}

// TestValidateNilSettings guards against a regression where a nil
// PACSettings.Settings map (as left behind when PAC is disabled via
// SetDefaults) reaches SyncConfig and panics with "assignment to entry in
// nil map".
func TestValidateNilSettings(t *testing.T) {
opacCR := &OpenShiftPipelinesAsCode{
ObjectMeta: metav1.ObjectMeta{
Name: "name",
Namespace: "namespace",
},
Spec: OpenShiftPipelinesAsCodeSpec{
CommonSpec: CommonSpec{
TargetNamespace: "openshift-pipelines",
},
PACSettings: PACSettings{
Settings: nil,
},
},
}
err := opacCR.Validate(context.TODO())
assert.Assert(t, err == nil, "unexpected validation error: %v", err)
assert.Assert(t, opacCR.Spec.PACSettings.Settings == nil, "Validate must not mutate the CR")
}
Loading