// Validate ensures that the entry considers itself to be in a // complete and valid state. func (e AuditEntry) Validate() error { if e.JujuServerVersion == version.Zero { return errors.NewNotValid(errors.NotAssignedf("JujuServerVersion"), "") } if e.ModelUUID == "" { return errors.NewNotValid(errors.NotAssignedf("ModelUUID"), "") } if utils.IsValidUUIDString(e.ModelUUID) == false { return errors.NotValidf("ModelUUID") } if e.Timestamp.IsZero() { return errors.NewNotValid(errors.NotAssignedf("Timestamp"), "") } if e.Timestamp.Location() != time.UTC { return errors.NewNotValid(errors.NotValidf("Timestamp"), "must be set to UTC") } if e.RemoteAddress == "" { return errors.NewNotValid(errors.NotAssignedf("RemoteAddress"), "") } if e.OriginType == "" { return errors.NewNotValid(errors.NotAssignedf("OriginType"), "") } if e.OriginName == "" { return errors.NewNotValid(errors.NotAssignedf("OriginName"), "") } if e.Operation == "" { return errors.NewNotValid(errors.NotAssignedf("Operation"), "") } // Data remains unchecked as it is always optional. return nil }
code: params.CodeUnauthorized, helperFunc: params.IsCodeUnauthorized, }, { err: errors.NotProvisionedf("machine 0"), code: params.CodeNotProvisioned, helperFunc: params.IsCodeNotProvisioned, }, { err: errors.AlreadyExistsf("blah"), code: params.CodeAlreadyExists, helperFunc: params.IsCodeAlreadyExists, }, { err: common.ErrUnknownWatcher, code: params.CodeNotFound, helperFunc: params.IsCodeNotFound, }, { err: errors.NotAssignedf("unit mysql/0"), code: params.CodeNotAssigned, helperFunc: params.IsCodeNotAssigned, }, { err: common.ErrStoppedWatcher, code: params.CodeStopped, helperFunc: params.IsCodeStopped, }, { err: &state.HasAssignedUnitsError{"42", []string{"a"}}, code: params.CodeHasAssignedUnits, helperFunc: params.IsCodeHasAssignedUnits, }, { err: common.ErrTryAgain, code: params.CodeTryAgain, helperFunc: params.IsCodeTryAgain, }, {